none
SSMS Incorrect Syntax , Variable einsetzen? RRS feed

  • Frage

  • Hallo,

    ich versuche ein Beispiel aus einem Microsoft T-SQL in Management Studio auszuführen.

    USE [master]
    GO
    /****** Object:  Database [spiel]    Script Date: 08/14/2012 13:40:29 ******/

    DECLARE @data_path nvarchar(256)
        SET @data_path = (SELECT SUBSTRING(physical_name, 1,
                    CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                FROM master.sys.master_files
                WHERE database_id = 1 AND file_id = 1);
                

    CREATE DATABASE [spiel] ON  PRIMARY
    ( NAME = N'spiel', FILENAME = '' + @data_path + 'spiel.mdf' , SIZE = 18432KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
     LOG ON
    ( NAME = N'spiel_log', FILENAME = '' + @data_path + 'spiel_log.ldf' , SIZE = 16576KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    GO

    Leider klappt das so nicht.

    Es kommt die Meldung:

    Msg 102, Level 15, State 1, Line 11
    Incorrect syntax near '@data_path'.

    Geht so etwas nur mit dem "SQLCMD" Tool oder wie kann man eine Variable hier einbinden?

    vielen Dank

    Gruss

    Hans

    Dienstag, 14. August 2012 12:47

Antworten

  • Hallo Christoph,

    <<Kurzfassung: Baue das SQL in einem String zusammen und führe den String dann aus.>>

    puhh, da muss ich erst noch ein wenig lesen und schauen wie das geht. (bin noch recht neu bei MS SQL :-)) )

    trotzdem vielen Dank für die Hilfe

    Gruss

    hans

    • Als Antwort markiert hawk-master Montag, 20. August 2012 06:12
    Dienstag, 14. August 2012 14:19

Alle Antworten

  • Hallo Hans,
    dazu müsstest Du dynamisches SQL einsetzen.
    Siehe auch:
    http://www.insidesql.org/blogs/frankkalis/2004/07/16/dynamisches-sql-fluch-und-segen
     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Dienstag, 14. August 2012 13:08
    Beantworter
  • Hallo Christoph,

    ich hatte dieses SQL Script gefunden und dachte ich könnte so etwas mal in einer Query in Management Studio ausprobieren.

    USE [master]
    GO

    BEGIN TRY

        DECLARE @data_path nvarchar(256)
        SET @data_path = (SELECT SUBSTRING(physical_name, 1,
                    CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                FROM master.sys.master_files
                WHERE database_id = 1 AND file_id = 1);

        EXECUTE ('CREATE DATABASE [$(DATABASE_NAME)]
        ON PRIMARY
        ( NAME = [$(DATABASE_NAME)],
            FILENAME = '''+ @data_path + '$(DATABASE_NAME).mdf'',
            SIZE = 133120KB,
            MAXSIZE = UNLIMITED,
            FILEGROWTH = 1024KB )
        LOG ON
        ( NAME = [$(DATABASE_NAME)_log],
            FILENAME = '''+ @data_path + '$(DATABASE_NAME)_log.ldf'',
            SIZE = 517184KB,
            MAXSIZE = 2048GB,
            FILEGROWTH = 10% )
         '
        );

    ..

    Ohne jetzt deinen Artikel gelesen zu haben: Das bedeutet dann das man so etwas nicht direkt in einer Query in Management Studio machen kann sondern nur über eine Kommandozeile?

    vielen Dank

    viele Grüße

    Hans

    Dienstag, 14. August 2012 13:45
  • Hallo Hans,
    Dein Beispiel verwendet EXECUTE(<String>), das ist genau das, was in dem Artikel auch beschrieben wird.

    Kurzfassung: Baue das SQL in einem String zusammen und führe den String dann aus.

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Dienstag, 14. August 2012 13:55
    Beantworter
  • Hallo Christoph,

    <<Kurzfassung: Baue das SQL in einem String zusammen und führe den String dann aus.>>

    puhh, da muss ich erst noch ein wenig lesen und schauen wie das geht. (bin noch recht neu bei MS SQL :-)) )

    trotzdem vielen Dank für die Hilfe

    Gruss

    hans

    • Als Antwort markiert hawk-master Montag, 20. August 2012 06:12
    Dienstag, 14. August 2012 14:19