sql - 构建 INSERT 语句值的动态列表

标签 sql sql-server-2008

我正在编写一个存储过程来创建一组 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/

相关文章:

c# - SSIS 包是导入和导出大量数据的最佳解决方案吗?

mysql - 从 SQL Server 2008 的 .mdf 和 .ldf 文件创建 MySQL 数据库

sql-server - 当 UPDATE 的结果不明确时,为什么 SQL Server 不会失败?

c# - 通过sqlquery C#检查数据库中的空值

sql - 规范化现有表的 T-SQL 是什么?

sql - 如何在 WHERE 子句中引用别名?

sql - 使用 Big Query/Google Analytics 的 Regexp_extract 将子字符串从字符 A 提取到字符 B 或 EOL

sql - 在一个查询中对多个表进行多个左连接

php - 我如何查询wordnet数据库(mysql)以获取一个词的所有同义词和相似词?

php - 如何检查用户名和密码是否区分大小写?