gpt4 book ai didi

sql - 对多个表执行一个 SQL 命令(无需重写 SQL 命令)

转载 作者:行者123 更新时间:2023-12-04 14:34:36 27 4
gpt4 key购买 nike

我有一系列 SQL 命令,我想在大约 40 个不同的表上运行。必须有一种方法可以在不编写 40 条不同命令的情况下执行此操作...

我在 SQL Server 中运行它。所有表都有不同的名称,我要操作的列(下面的 VariableColumn)的名称也不同。我确实有表和列的名称列表。

此代码的最终效果:我将 VariableColumn 作为外键连接到 DOCS 表中的 DOC_ID 列。有些表的 VariableColumn 中的值与 DOC_ID 列中的任何值都不对应(过时的数据),因此我首先删除任何此类行。

命令:

-- Delete rows in VariableTable that have invalid VariableColumn values
DELETE FROM VariableTable
FROM VariableTable v
LEFT OUTER JOIN DOCS d
ON d.DOC_ID = v.VariableColumn
WHERE d.DOC_ID IS NULL

-- Add foreign key to VariableTable table
ALTER TABLE VariableTable
ADD CONSTRAINT FK_DOCS_VariableTable_VariableColumn FOREIGN KEY (VariableColumn)
REFERENCES DOCS(DOC_ID);

最佳答案

既然你有表名和列名的列表,你就可以将它们放在一个表中。您可以在游标中使用它们来构建和执行命令。

例如:

DECLARE @Target TABLE (tbl SYSNAME,col SYSNAME)
INSERT @Target VALUES ('tbl_1','col_a'),('tbl_2','col_b')

DECLARE @tbl SYSNAME
DECLARE @col SYSNAME
DECLARE @sql NVARCHAR(MAX)

DECLARE work CURSOR FOR
SELECT tbl,col
FROM @Target

OPEN work
FETCH NEXT FROM work INTO @tbl,@col

WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'PRINT ''Do something to table: ' + @tbl + ' column: '+ @col + ''''
EXECUTE sp_executesql @sql
FETCH NEXT FROM work INTO @tbl,@col
END

CLOSE work
DEALLOCATE work

关于sql - 对多个表执行一个 SQL 命令(无需重写 SQL 命令),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393468/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com