用于基于列类型插入默认值的存储过程



我正在尝试弄清楚如何创建一个存储过程,该过程将表作为输入,然后根据列类型在所有列中插入值。

例如:表Dim.Name有两列;第一列是ID,它是一个int,第二列是Name,它的类型是nvarchar

)
ID(intName(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 小提琴

最新更新