我正在编写一个存储过程来创建一组 DELETE
供管理员针对数据库运行的语句
作为“回滚”解决方案的一部分,我希望对于要删除的每一行,还分别创建一个相应的 INSERT
语句,以便如果运行脚本的人希望撤消,他们可以简单地对数据库运行插入语句
我的问题是,如果我有一个包含 8 列(Col1..Col8)的表,我如何提取所有列的逗号分隔列表中的值,以便我最终得到
INSERT INTO Table VALUES (Col1value, Col2value, ...Col8value)
最佳答案
考虑以下命令:
SELECT 'SELECT ' +
STUFF ((
SELECT ', [' + name + ']'
FROM syscolumns
WHERE id = OBJECT_ID('Table') AND
name <> 'me'
FOR XML PATH('')), 1, 1, '') +
' FROM [Table]'
这将构建一个
SELECT
特定表的语句。建一个INSERT
声明它可能是这样的:SELECT @sql = 'INSERT INTO [Table] (' +
STUFF ((
SELECT ', [' + name + ']'
FROM syscolumns
WHERE id = OBJECT_ID('Table') AND
name <> 'me'
FOR XML PATH('')), 1, 1, '') +
') VALUES (' +
STUFF ((
SELECT ', @' + name
FROM syscolumns
WHERE id = OBJECT_ID('Table') AND
name <> 'me'
FOR XML PATH('')), 1, 1, '') + ')'
当然有很多方法可以到达
INSERT
声明,根据您的喜好塑造它。
关于sql - 构建 INSERT 语句值的动态列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20634653/