【发布时间】:2018-03-29 23:22:01
【问题描述】:
我有以下查询,将一些值插入到一个表中,这是有效的:
INSERT INTO Table(id, field_1, field_2, field_3, field_4)
SELECT (SELECT INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME + FORMAT(convert (datetime,date) , 'ddMMyyyy') +@MAINFIELD+@FIELDTYPE), @MAINFIELD, date , @ColumnName, '0'
FROM kat.[dbo].[Imported_Table]
INNER JOIN INFORMATION_SCHEMA.COLUMNS on INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = @TABLENAME and INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION = @CurrentPosition
这工作正常。当我想在表中插入一个新值并且这个值是从动态查询中获得时,问题就来了:
这是单独工作的查询(变量已定义)
EXEC ('SELECT '+@ColumnName+' from kat.[dbo].[Imported_Table]')
如果我想将它包含在插入查询中,但我认为这是不可能的。至少它不是为我编译的:
INSERT INTO Table(id, field_1, field_2, field_3, field_4, **field_5**)
SELECT (SELECT INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME + FORMAT(convert (datetime,date) , 'ddMMyyyy') +@MAINFIELD+@FIELDTYPE), @MAINFIELD, date , @ColumnName, '0', **EXEC ('SELECT '+@ColumnName+' from kat.[dbo].[Imported_Table]')**
FROM kat.[dbo].[Imported_Table]
INNER JOIN INFORMATION_SCHEMA.COLUMNS on INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = @TABLENAME and INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION = @CurrentPosition
也许有更好的解决方案将此动态查询包含在插入子句中?
编辑:在 Nisarg cmets 和支持后,我调整了查询:
set @MAINFIELD= CAST(@MAINCURRENCY AS VARCHAR);
set @FIELDTYPE= CAST(@RATETYPE AS VARCHAR);
SET @ColumnName = CAST(@ColumnName AS VARCHAR)
SET @CurrentPosition = CAST(@CurrentPosition AS INT)
EXEC( 'INSERT INTO Devisen_geldkurs(devisen_geldkurs, field_1, field_2, field_3, field_4, field_5)
SELECT (SELECT INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME + FORMAT(convert (datetime,date) , ''ddMMyyyy'') +''@MAINFIELD''+''@FIELDTYPE''), "@MAINFIELD", date , "@ColumnName", ''0'',
SELECT '+@ColumnName+' from kat.[dbo].[Imported_Table] from kat.[dbo].[Imported_Table]
INNER JOIN INFORMATION_SCHEMA.COLUMNS on INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = "Imported_Table" and INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION = ''@CurrentPosition''')
似乎唯一的问题在于 SELECT 子句:
Incorrect syntax near the keyword 'SELECT'.
我还删除了以下内容之一:from kat.[dbo].[Imported_Table] FROM kat.[dbo].[Imported_Table]。写了两次。
【问题讨论】:
标签: sql sql-server schema sql-insert dynamic-sql