我想将此 SQL Server 请求的结果存储在临时表中
#TAB1
但是当我向 #TAB1
添加插入时,我的程序崩溃并出现以下错误
关键字“INSERT”附近的语法不正确。
代码:
CREATE TABLE #TAB1 (
NAT_SIN VARCHAR(50),
STE_ASSUR VARCHAR(50),
EXER_SIN INT,
NUM_SIN INT,
CLE_SIN INT,
SAV_TG VARCHAR(50),
RCP_TG VARCHAR(50),
TYPE VARCHAR(50),
VALUE VARCHAR(50)
)
DECLARE @Columns TABLE (
ColumnName VARCHAR(50),
ColumnType VARCHAR(50)
)
INSERT INTO @Columns VALUES
('SAV_RA', 'SAV_RA'),
('RCP_RA', 'RCP_RA'),
('SAV_AB', 'SAV_AB'),
('RCP_AB', 'RCP_AB'),
('SAV_PP', 'SAV_PP'),
('RCP_PP', 'RCP_PP'),
('SAV_C1', 'SAV_C1'),
('RCP_C1', 'RCP_C1'),
('SAV_C0', 'SAV_C0'),
('RCP_C0', 'RCP_C0'),
('SAV_F0', 'SAV_F0'),
('RCP_F0', 'RCP_F0'),
('SAV_F1', 'SAV_F1'),
('RCP_F1', 'RCP_F1'),
('SAV_F2', 'SAV_F2'),
('RCP_F2', 'RCP_F2')
DECLARE @SQL NVARCHAR(MAX) = ''
SELECT @SQL = @SQL + '
INSERT INTO #TAB1 SELECT
NAT_SIN,
STE_ASSUR,
EXER_SIN,
NUM_SIN,
CLE_SIN,
SAV_TG,
RCP_TG,
''' + ColumnType + ''' AS TYPE,
' + ColumnName + ' AS VALUE
FROM
#Test
UNION ALL
'
FROM @Columns
SET @SQL = LEFT(@SQL, LEN(@SQL) - 11)
EXEC(@SQL)
select * from #TAB1
当您构建动态 SQL 并将列名 (ColumnName) 连接到 SELECT 语句中时,确保它们正确封装至关重要。由于它们表示字符串值,因此必须将它们括在单引号内。
具体操作方法如下:
SELECT @SQL = @SQL + '
INSERT INTO #TAB1 SELECT
NAT_SIN,
STE_ASSUR,
EXER_SIN,
NUM_SIN,
CLE_SIN,
SAV_TG,
RCP_TG,
''' + ColumnType + ''' AS TYPE,
''' + ColumnName + ''' AS VALUE
FROM
#Test
UNION ALL
'
FROM @Columns
在此代码片段中,我确保在
ColumnName
(''' + ColumnName + '''
) 周围添加单引号,以确保它在动态 SQL 语句中被视为字符串文字。这可确保正确处理查询中的列名称。