首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新SQL Server架构中每个表中的列

更新SQL Server架构中每个表中的列
EN

Stack Overflow用户
提问于 2019-11-05 22:02:30
回答 1查看 132关注 0票数 0

我想要更新给定模式中每个表中的列Last_Modified。如果更新了同一表(ENDTIME)中的另一列,则此列将使用最新的时间戳进行更新。

为此,我在SQL Server中使用了以下脚本:

代码语言:javascript
运行
复制
DECLARE @TotalRows FLOAT
SET @TotalRows = (SELECT COUNT(*) FROM table1)

DECLARE @TotalLoopCount INT
SET @TotalLoopCount = CEILING(@TotalRows / 100000)

DECLARE @InitialLoopCount INT
SET @InitialLoopCount = 1

DECLARE @AffectedRows INT
SET @AffectedRows = 0

DECLARE @intialrows INT;
SET @intialrows = 1

DECLARE @lastrows INT
SET @lastrows = 100000;

WHILE @InitialLoopCount <= @TotalLoopCount
BEGIN
    WITH updateRows AS
    (
        SELECT 
            t1.*, 
            ROW_NUMBER() OVER (ORDER BY caster) AS seqnum 
        FROM
            table1 t1
    )
    UPDATE updateRows 
    SET last_modified = ENDTIME AT TIME ZONE 'Central Standard Time'
    WHERE last_modified IS NULL 
      AND updateRows.ENDTIME IS NOT NULL
      AND updateRows.seqnum BETWEEN @intialrows AND @lastrows; 

    SET @AffectedRows = @AffectedRows + @@ROWCOUNT
    SET @intialrows = @intialrows + 100000
    SET @lastrows = @lastrows + 100000

    -- COMMIT
    SET @Remaining = @TotalRows - @AffectedRows
    SET @InitialLoopCount = @InitialLoopCount + 1
END

此脚本确定表的计数,将其除以100000,并且只运行该数量的循环来执行整个更新。它以批处理/循环的方式分解更新,然后对某些行执行更新,直到完成所有行的更新。

此脚本仅适用于1个表,即table1。现在,我想修改这个脚本,让它动态地获取模式中的所有表,并为每个表运行上面的脚本。假设模式名为schema1,它有32个表,因此此脚本应该对所有这32个表运行。

我可以检索schema1中的表,但不能动态地将这些表发送到此脚本。有谁能帮我一下吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-05 22:16:33

要在运行时动态更改表名,您将需要类似于sp_executesql的代码。有关其用法的示例,请参阅此处:https://stackoverflow.com/a/3556554/22194

然后,您可以使用一个外部游标来获取表名,然后将查询组装成一个字符串并执行它们。不过,这看起来会很可怕。

如果您的模式没有太大变化,另一种方法是为每个表生成一个包含部分的长脚本。您可以通过查询表名,然后对每个不同的表名重复该脚本来生成脚本。Excel实际上可以很好地完成这类工作--将表名粘贴到Excel中,使用Excel生成脚本,然后将其复制/粘贴回SSMS。

这将是一个冗长的重复脚本,但可以避免将所有SQL都放在字符串中的缺点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58713003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档