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

如何遍历SQL Server数据库表A字段,查找其他表中的共同值?

在MS SQL Server中检查表A字段与其他表字段的共同值

需求:遍历数据库中表A的每个字段,检查其他表是否存在同名字段与当前字段至少有一个共同值,最终返回包含表A字段名、对应其他表名、表A字段名、其他表对应字段名的结果集。

以下是实现代码:

DECLARE @TableName NVARCHAR(255) = 'A';

DECLARE @ColumnName NVARCHAR(255);
DECLARE column_cursor CURSOR FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName;

CREATE TABLE #CommonValues (TableAField NVARCHAR(255), TableB NVARCHAR(255), CommonFieldInA NVARCHAR(255), CommonFieldInB NVARCHAR(255));

OPEN column_cursor;
FETCH NEXT FROM column_cursor INTO @ColumnName;

WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @DynamicSQL NVARCHAR(MAX);
    SET @DynamicSQL = N'INSERT INTO #CommonValues (TableAField, TableB, CommonFieldInA, CommonFieldInB)
                      SELECT ''' + @ColumnName + ''', T.TABLE_NAME, ''' + @ColumnName + ''', C.COLUMN_NAME
                      FROM ' + @TableName + ' AS A
                      INNER JOIN INFORMATION_SCHEMA.TABLES AS T
                      ON T.TABLE_NAME <> ''' + @TableName + '''
                      INNER JOIN INFORMATION_SCHEMA.COLUMNS AS C
                      ON C.TABLE_NAME = T.TABLE_NAME
                      AND C.COLUMN_NAME = ''' + @ColumnName + '''
                      WHERE EXISTS (
                          SELECT 1
                          FROM ' + @TableName + ' AS B
                          WHERE A.' + @ColumnName + ' = B.' + @ColumnName + ')';

    EXEC sp_executesql @DynamicSQL;

    FETCH NEXT FROM column_cursor INTO @ColumnName;
END

CLOSE column_cursor;
DEALLOCATE column_cursor;

SELECT * FROM #CommonValues;

DROP TABLE #CommonValues;

代码说明:

  • 用游标column_cursor遍历表A的所有字段名
  • 创建临时表#CommonValues存储最终匹配结果
  • 通过动态SQL生成查询语句,关联数据库内其他含同名字段的表,利用EXISTS子句验证是否存在共同值
  • 执行动态SQL将符合条件的记录插入临时表,最后查询临时表输出结果,完成后清理游标与临时表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:10:12