SqlCmd 모드를 사용하는 단일 '호출'스크립트에 포함시키려는 대량 데이터 가져 오기를 수행 할 스크립트 집합이 있습니다. 내가 가진 문제는 각 스크립트가 경로 또는 공통 객체를 정의하는 동일한 선언 된 집합을 포함한다는 것입니다. '호출하는'스크립트를 실행하면 vars가 이미 선언 된 오류가 발생합니다.여러 스크립트에서 공통적으로 사용되는 T-SQL 스크립트에서 변수를 선언하는 방법
개별 스크립트에서 선언을 가져 오는 경우 Intellisense는 물론 선언되지 않았다고 불평합니다. 스크립트 자체도 '호출'스크립트와 분리하여 실행해야하므로 이상적으로 개별 스크립트에서도 vars도 선언해야합니다.
감사합니다.
예 : 공통 개별 스크립트 선언하고 초기 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 + ''')'
예 -
-- 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