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

MSSQL服务器:从全库指定名称表中提取SMTP Server字段值

解决方案

你可以用下面的动态SQL脚本,在sp_MSforeachdb里嵌套动态查询,既筛选出目标表,又能提取指定字段的值,还会自动跳过没有SMTP Server字段的表:

EXEC sp_MSforeachdb '
USE [?]
-- 先检查当前库是否有符合条件的表
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ''%SMTP Mail Setup%'')
BEGIN
    DECLARE @dynamicSql NVARCHAR(MAX) = ''''
    -- 拼接每个符合条件且存在目标字段的表的查询语句
    SELECT @dynamicSql = @dynamicSql + 
        ''SELECT ''''?'''' AS DB_Name, '''''' + TABLE_NAME + '''''' AS Table_Name, [SMTP Server] AS SMTP_Server_Value FROM [?].dbo.['' + TABLE_NAME + ''] UNION ALL ''
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME LIKE ''%SMTP Mail Setup%''
      AND EXISTS (
          SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS 
          WHERE TABLE_NAME = INFORMATION_SCHEMA.TABLES.TABLE_NAME
            AND COLUMN_NAME = ''SMTP Server''
      )
    -- 移除末尾多余的UNION ALL并执行
    IF LEN(@dynamicSql) > 0
    BEGIN
        SET @dynamicSql = LEFT(@dynamicSql, LEN(@dynamicSql) - 10)
        EXEC sp_executesql @dynamicSql
    END
END
'

脚本说明

  • 先在每个数据库中检查是否存在表名含SMTP Mail Setup的表
  • 对每个符合条件的表,额外验证是否存在SMTP Server字段,避免因字段缺失报错
  • 动态拼接查询语句,一次性返回所有符合条件的数据库名、表名和对应字段值
  • 如果部分数据库你没有读取权限,脚本会跳过这些库(或返回权限错误,但不影响其他库的执行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:30:57