- Използвайте правилните типове
SYSNAME
за идентификатори,NVARCHAR(MAX)
за заявка - Използвайте
REPLACE
вместо конкатенация ще бъде много по-лесно да се отстраняват грешки, особено когато имате нужда от низови литерали - Обмислете използването на
QUOTENAME
функция
Код:
DECLARE
@tableName SYSNAME,
@columnName SYSNAME,
@prompt VARCHAR(20),
@dynSQL NVARCHAR(MAX);
SET @tableName = QUOTENAME('A1-ExciseESN');
SET @columnName = QUOTENAME('Anode Excise ESN (A1)');
SET @dynSQL =
N'INSERT INTO <tableName>
([trav num], <columnName>)
Select [trav num], <columnName>
FROM [temprmi$] t1
PIVOT(min([Lvl1 Trace Data])
FOR [Prompt Text] IN (<columnName>)
) AS PVTTable
where <columnName> is not null
and [trav num] not in (select [trav num] from <tableName> )'
SET @dynSQL = REPLACE(REPLACE(@dynSQL, '<tableName>', @tableName),
'<columnName>', @columnName);
PRINT @dynSQL;
Изход:
INSERT INTO [A1-ExciseESN]
([trav num], [Anode Excise ESN (A1)])
Select [trav num], [Anode Excise ESN (A1)]
FROM [temprmi$] t1
PIVOT(min([Lvl1 Trace Data])
FOR [Prompt Text] IN ([Anode Excise ESN (A1)])
) AS PVTTable
where [Anode Excise ESN (A1)] is not null
and [trav num] not in (select [trav num] from [A1-ExciseESN] )