如何从#LukaTestTable记录的表中获取GUID列值并生成结果表?
获取临时表中所有表的GUID列值并关联表名
当然可以实现这个需求!由于临时表#LukaTestTable中存储的是带GUID列的表名,我们需要用动态SQL来遍历这些表,逐一查询它们的GUID列并关联对应的表名,最终合并成包含TABLE_NAME和GUID_VALUE的结果集。
具体实现代码
-- 声明变量存储动态生成的SQL语句 DECLARE @DynamicSQL NVARCHAR(MAX) = N'' -- 遍历临时表,为每个表拼接查询语句 SELECT @DynamicSQL += N'SELECT TABLE_NAME = ''' + QUOTENAME(table_name) + N''', GUID_VALUE = GUID FROM ' + QUOTENAME(table_name) + N' UNION ALL ' FROM #LukaTestTable -- 移除末尾多余的"UNION ALL" SET @DynamicSQL = LEFT(@DynamicSQL, LEN(@DynamicSQL) - 10) -- 执行动态SQL EXEC sp_executesql @DynamicSQL
代码说明
- 动态SQL拼接:通过遍历
#LukaTestTable中的每个表名,为每个表生成一条独立的SELECT语句,明确指定TABLE_NAME为当前表的名称(用QUOTENAME()包裹表名,避免表名含特殊字符或关键字导致语法错误),GUID_VALUE为该表GUID列的值。 - 合并查询结果:所有表的查询语句用
UNION ALL连接,保证结果保留所有行(包括重复表名的查询结果,若需去重可替换为UNION,但会牺牲性能)。 - 执行动态SQL:使用
sp_executesql执行拼接好的SQL语句,输出最终结果。
可选优化
如果需要过滤掉GUID列的空值,可以在每个SELECT语句后添加WHERE GUID IS NOT NULL,修改后的拼接逻辑如下:
SELECT @DynamicSQL += N'SELECT TABLE_NAME = ''' + QUOTENAME(table_name) + N''', GUID_VALUE = GUID FROM ' + QUOTENAME(table_name) + N' WHERE GUID IS NOT NULL UNION ALL ' FROM #LukaTestTable
内容的提问来源于stack exchange,提问作者SuxoiKorm
相关产品推荐
相关产品推荐

