【发布时间】:2021-07-28 08:42:48
【问题描述】:
我正在使用带有 SSMS17 的 SQL Server 2008R2,并尝试根据当前数据自动生成一些“最少使用字段”报告。理想情况下,我想将这些字段的列表检索到表变量中,然后创建一个 SELECT 语句,在其中我将记录 ID 与这些最少使用字段的值一起提取,但变量解析为文本而不是字段姓名。我正在尝试的可能吗?
这是一个使用已知字段名称的简化示例:
DECLARE @f1 as nvarchar(20) = 'MySpaceID';
DECLARE @f2 as nvarchar(20) = 'FaxNum';
DECLARE @f3 as nvarchar(20) = 'PagerNum';
SELECT [ID], [FullName], @f1 as Field1, @f2 as Field2, @f3 as Field3
FROM tblContacts
WHERE @f1 is not null
OR @f2 is not null
OR @f3 is not null;
我得到的是作为输出的变量值。
f1 f2 f3
---------- ------ ---------
MySpaceID FaxNum PagerNum
MySpaceID FaxNum PagerNum
MySpaceID FaxNum PagerNum
这可行吗?
谢谢。
【问题讨论】:
-
您需要使用变量动态构建 SQL 查询字符串,然后直接执行该查询字符串。
-
谢谢,@TimBiegeleisen。我正在研究如何正确地做到这一点。
-
谢谢,@Squirrel。很棒的信息!我需要一些时间来理解它。
-
TL;DR;始终在注入的对象/列名称上使用
QUOTENAME,根据sys.objects/sys.columns验证名称,始终使用nvarchar而不是varchar,在可能的情况下始终通过sp_executesql传递实际数据的参数,从不聚合合并变量(使用STRING_AGG或FOR XML)
标签: sql-server tsql variables dynamic dynamicquery