如何遍历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
相关产品推荐
相关产品推荐

