我试图弄清楚如何创建一个存储过程,该过程将表作为输入,然后根据列类型在所有列中插入值。
例如:表Dim.Name
有两列;第一个是ID
这是一个 int
第二个是Name
其类型为 nvarchar
:
我试图弄清楚如何创建一个存储过程,它将表作为输入并为所有 int
插入“-1”列和所有 nvarchar
的“未知”列。
所以想要的结果是
dbo.usp_InsertData(Dim.Name)
最佳答案
您可以使用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 - 用于根据列类型插入默认值的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73079785/