sql >> データベース >  >> RDS >> Sqlserver

T-SQLでデータベース名に変数を使用するにはどうすればよいですか?

    スクリプト全体を、{SERVERNAME}プレースホルダーを使用してテンプレート文字列に配置します。次に、次を使用して文字列を編集します:

    SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
    

    で実行します
    EXECUTE (@SQL_SCRIPT)
    

    3年間で、私のコードが機能しないことに誰も気づかなかったとは信じがたいです。 !

    EXECはできません 複数のバッチ。 GO はバッチセパレータであり、T-SQLステートメントではありません。 3つの別々の文字列を作成してから、EXECを作成する必要があります。 置換後のそれぞれ。

    GOで分割して、単一のテンプレート文字列を複数の行に分割することで、「賢い」何かを実行できると思います。; ADO.NETコードでそれを行いました。

    そして、「SERVERNAME」という言葉はどこから来たのですか?

    これが私がテストしたばかりの(そして動作する)コードです:

    DECLARE @DBNAME VARCHAR(255)
    SET @DBNAME = 'TestDB'
    
    DECLARE @CREATE_TEMPLATE VARCHAR(MAX)
    DECLARE @COMPAT_TEMPLATE VARCHAR(MAX)
    DECLARE @RECOVERY_TEMPLATE VARCHAR(MAX)
    
    SET @CREATE_TEMPLATE = 'CREATE DATABASE {DBNAME}'
    SET @COMPAT_TEMPLATE='ALTER DATABASE {DBNAME} SET COMPATIBILITY_LEVEL = 90'
    SET @RECOVERY_TEMPLATE='ALTER DATABASE {DBNAME} SET RECOVERY SIMPLE'
    
    DECLARE @SQL_SCRIPT VARCHAR(MAX)
    
    SET @SQL_SCRIPT = REPLACE(@CREATE_TEMPLATE, '{DBNAME}', @DBNAME)
    EXECUTE (@SQL_SCRIPT)
    
    SET @SQL_SCRIPT = REPLACE(@COMPAT_TEMPLATE, '{DBNAME}', @DBNAME)
    EXECUTE (@SQL_SCRIPT)
    
    SET @SQL_SCRIPT = REPLACE(@RECOVERY_TEMPLATE, '{DBNAME}', @DBNAME)
    EXECUTE (@SQL_SCRIPT)
    


    1. OracleをAmazonAuroraに接続する

    2. PARSE()を使用してSQLServerで文字列を日付/時刻に変換する方法

    3. 行が更新または挿入されたかどうかを検出します

    4. DESCRIBEコマンドを使用せずにOracleでテーブルを記述するにはどうすればよいですか?