さまざまな SQL Server インスタンスで特定のスクリプトを実行する必要があります。彼らは別の ID でデータベースを使用します。ただし、すべてのデータベースには、処理する必要がある同じテーブル (同じ名前と構造) があります。そのため、データベースの名前を検出し、それを文字列変数に設定し、SQL ステートメントを構築し、構築された文字列を を介して実行したいと考えていますsp_executesql
。正しく実行される裸のコマンドは次のとおりです。
USE [1000574];
SELECT TOP 10 temperature_1, UTC FROM dbo.Data;
@database_name
次に、プレースホルダーを使用して同等の文字列を実行しようとしています:
DECLARE @database_name nvarchar(100);
SET @database_name = '1000574';
EXEC sp_executesql N'USE [@database_name];
SELECT TOP 10 temperature_1, UTC FROM dbo.Data;',
N'@database_name nvarchar(100)',
@database_name = @database_name
私が得るのは、次のエラーメッセージです。
*メッセージ 911、レベル 16、状態 1、行 1
データベース '@database_name' は存在しません。名前が正しく入力されていることを確認してください。*
エラーはどこにありますか?
ありがとう、ペトル