[解決済み] T-SQLでデータベース名に変数を使用するには?
2022-07-11 23:21:52
質問
データベース名をスクリプトの何箇所かで使っているのですが、すぐに変更できるようにしたいので、以下のようなものを探しています。
DECLARE @DBNAME VARCHAR(50)
SET @DBNAME = 'TEST'
CREATE DATABASE @DBNAME
GO
ALTER DATABASE @DBNAME SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE @DBNAME SET RECOVERY SIMPLE
GO
しかし、これではうまくいきません。では、このコードの正しい書き方は何でしょうか?
どのように解決するのですか?
スクリプト全体をテンプレート文字列に入れ、{SERVERNAME}プレースホルダーを付けます。そして、その文字列を編集してください。
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
で実行し
EXECUTE (@SQL_SCRIPT)
信じられないことですが、3 年間の間に、誰も私のコード は機能しない !
あなたは
EXEC
を複数のバッチにすることができます。
GO
はバッチセパレータであり、T-SQLステートメントではありません。3つの別々の文字列を構築する必要があり、その後に
EXEC
をそれぞれ代入する必要があります。
で分割して、単一のテンプレート文字列を複数の行に分割することで、何かquot;clever"を行うことができると思います。
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)
関連
-
[解決済み] 文字列から特定の文字を削除する
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] T-SQLでnot equalには!=と<>のどちらを使うべきですか?
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】各GROUP BY式は、外部参照でない列を少なくとも1つ含む必要があります。
-
[解決済み] プロシージャは 'ntext/nchar/nvarchar' 型のパラメータ '@statement' を想定しています。
-
[解決済み] SQL Server Error "String Data, Right Truncation "の意味と修正方法について教えてください。
-
[解決済み] データベースのトランザクションログが満杯です。ログの領域が再利用できない理由を調べるには、sys.databases の log_reuse_wait_desc カラムを参照してください。
-
[解決済み] 変数に値を代入するSELECT文は、データ検索操作と組み合わせてはいけません。
-
[解決済み] SSISの日付と時刻の連結
-
[解決済み] SQLでNaN値をNULLに、またはNaNを0に変換する
-
[解決済み] SQL Server の .sql ファイルとは何ですか?
-
[解決済み] すべてのテーブル、すべてのカラムを特定の値で検索する SQL Server [重複]。
-
[解決済み] 文字列から特定の文字を削除する