我正在尝试弄清楚如何创建一个存储过程,该过程将表作为输入,然后根据列类型在所有列中插入值。
例如:表Dim.Name
有两列;第一列是ID
,它是一个int
,第二列是Name
,它的类型是nvarchar
:
ID(int | )Name(nvarchar) |
---|---|
您可以使用sys.columns
构建动态INSERT
你为什么要这样做是另一个问题。
CREATE OR ALTER PROCEDURE WeirdInsert
@schema sysname,
@table sysname
AS
DECLARE @sql nvarchar(max) = (
SELECT '
INSERT ' + QUOTENAME(@schema) + '.' + QUOTENAME(@table) + '
(' + STRING_AGG(QUOTENAME(c.name), ', ') + ')
VALUES (' + STRING_AGG(
CASE WHEN c.system_type_id IN (34,35,99,167,167,175,231,239)
THEN '''Unknown'''
WHEN c.system_type_id IN (48,52,56,59,60,62,106,108,122,127)
THEN '-1'
ELSE 'DEFAULT'
END , ', ')
+ ');'
FROM sys.columns c
JOIN sys.tables t ON t.object_id = c.object_id
JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE t.name = @table
AND s.name = @schema
);
EXEC sp_executesql @sql; -- can also pass parameters
SQL 小提琴