SqlCmdモードを使用する単一の呼び出しスクリプトに含めることを試みているバルクデータのインポートを実行する一連のスクリプトがあります。私が持っている問題は、各スクリプトにはパスまたは共通オブジェクトを定義する宣言された変数のセットが含まれているということです。 '呼び出し'スクリプトを実行すると、varsがすでに宣言されているというエラーが表示されます。複数のスクリプト間で共通のT-SQLスクリプトで変数を宣言する方法
個々のスクリプトから宣言を引き出すと、Intellisenseはもちろんそれらが宣言されていないと訴えます。スクリプト自体も '呼び出し'スクリプトから分離して実行する必要があります。理想的には、個々のスクリプトで宣言された変数も必要です。
ありがとうございます。
例:スクリプトを呼び出すの 一般的な個々のスクリプト宣言と初期のSET
DECLARE @path varchar(256),
@currPeriod varchar(25),
@pastPeriod varchar(25),
@period varchar(25),
@fileName varchar(256),
@sheet varchar(25),
@sql varchar(MAX)
SET @path = 'H:\Scripts\DataImport';
SET @currPeriod = CONCAT(DATEPART(year,GETDATE()),'-',CONVERT(varchar(2), getdate(), 101));
SET @pastPeriod = CONCAT(DATEPART(year,DateAdd(month, -1, Convert(date, GETDATE()))),'-',CONVERT(varchar(2), DateAdd(month, -1, Convert(date, GetDate())), 101));
SET @period = @pastPeriod; -- Change to currPeriod or pastPeriod based on import type.
SET @fileName = 'ReferenceClients-' + @period + '.xlsx';
SET @sheet = '[Sheet1$]';
SET @sql = 'INSERT INTO #TempRefClients
SELECT *
FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 12.0; Database=' + @path + '\' + @period + '\' + @fileName + '; HDR=YES; IMEX=1'',
''SELECT * FROM ' + @sheet + ''')'
例 - あなたは3つのことを行うことによって、これを達成することができるはずSQLCMDモード
-- Ref Clients
BEGIN
PRINT ' ';
PRINT 'Importing Ref Clients';
:r "H:\Scripts\DataImport\CurrentMonthScripts\BulkImport-RefClients.sql"
END;
-- Top Clients
BEGIN
PRINT ' ';
PRINT 'Importing Top Clients';
:r "H:\Scripts\DataImport\CurrentMonthScripts\BulkImport-TopClients.sql"
END;
スクリプトの関連部分を表示できますか? –
[スクリプト変数](https://msdn.microsoft.com/en-us/library/ms188714.aspx)を見ましたか?すべてのスクリプトで同じスクリプト変数を定義し、その値をコマンドラインか ':Setvar'ステートメントを使って渡すことができます。それがSSMSとSSDTスクリプトの仕組みです。 –
サンプルテーブルのデータと期待される結果をフォーマットしたテキストで追加してください。 現在のクエリの試行も表示 – TheGameiswar