You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询SQL Server中未完成指定版本升级的数据库

解决方案

可以通过动态SQL遍历所有非系统数据库,检查每个数据库中[dbo].[Product_Version]表的Migrations_History列是否存在目标值,最终返回未升级的数据库名称。以下是完整的SQL语句:

DECLARE @DBName NVARCHAR(128)
DECLARE @SQL NVARCHAR(MAX)
DECLARE @Result TABLE (DBName NVARCHAR(128))

-- 遍历所有非系统在线数据库
DECLARE DB_Cursor CURSOR FOR
SELECT name 
FROM sys.databases 
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
  AND state_desc = 'ONLINE'

OPEN DB_Cursor
FETCH NEXT FROM DB_Cursor INTO @DBName

WHILE @@FETCH_STATUS = 0
BEGIN
  -- 构建动态SQL,分两种情况判断未升级状态
  SET @SQL = N'
  IF EXISTS (SELECT 1 FROM [' + @DBName + N'].sys.tables WHERE name = ''Product_Version'' AND schema_id = SCHEMA_ID(''dbo''))
  BEGIN
    IF NOT EXISTS (SELECT 1 FROM [' + @DBName + N'].dbo.Product_Version WHERE Migrations_History = ''20230724_v5.0.0'')
    BEGIN
      INSERT INTO @Result (DBName) VALUES (''' + @DBName + N''')
    END
  END
  ELSE
  BEGIN
    -- 无Product_Version表的数据库视为未升级
    INSERT INTO @Result (DBName) VALUES (''' + @DBName + N''')
  END'

  EXEC sp_executesql @SQL, N'@Result TABLE (DBName NVARCHAR(128)) OUTPUT', @Result OUTPUT

  FETCH NEXT FROM DB_Cursor INTO @DBName
END

CLOSE DB_Cursor
DEALLOCATE DB_Cursor

-- 返回最终结果
SELECT DBName AS 未升级数据库名称 FROM @Result

说明

  • 仅检查用户创建的在线数据库,自动排除系统库(master、model、msdb、tempdb)
  • 覆盖两种未升级场景:
    1. 存在Product_Version表但未记录目标升级版本
    2. 不存在Product_Version表(未执行基础升级脚本的数据库)
  • 借助游标和动态SQL实现跨库批量检查

内容的提问来源于stack exchange,提问作者NewOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:23:19