Sql server SQL Server:从字符串头获取列数据
我试图通过知道要检索的列的标题名来从表中收回列Sql server SQL Server:从字符串头获取列数据,sql-server,tsql,Sql Server,Tsql,我试图通过知道要检索的列的标题名来从表中收回列 select @sName from VPDW.dbo.Fact_Email_MW100 where VesselID = 3763 and (cast(UTClogTime as date) >= cast(DateAdd(day, -1, GETUTCDATE()) as date)) 在哪里 Declare @sName nvarchar(max); 保存我要从表中提取的列的字符串名称。整个查询需要是动态的,以便实现您试图执行
select @sName
from VPDW.dbo.Fact_Email_MW100
where VesselID = 3763
and (cast(UTClogTime as date) >= cast(DateAdd(day, -1, GETUTCDATE()) as date))
在哪里
Declare @sName nvarchar(max);
保存我要从表中提取的列的字符串名称。整个查询需要是动态的,以便实现您试图执行的操作。也就是说,您必须构建SQL,然后执行它。考虑如下(未测试):
整个查询需要是动态的,以便实现您想要做的事情。也就是说,您必须构建SQL,然后执行它。考虑如下(未测试):
有时不能使用动态SQL(在视图中,iTVFs)。在这种情况下,您可以使用XML的功能来处理一般查询:
DECLARE @ColName VARCHAR(100)='name';
SELECT
(
SELECT TOP 1 *
FROM sys.objects
FOR XML PATH('row'),TYPE
).value('(/row/*[local-name()=sql:variable("@ColName")]/text())[1]','nvarchar(max)') AS ValueAtColumnName;
这将获得一行sys.objects
,并返回列name
的值
对于您的查询,这看起来像
Declare @sName nvarchar(max);
SELECT
(
select *
from VPDW.dbo.Fact_Email_MW100
where VesselID = 3763
and (cast(UTClogTime as date) >= cast(DateAdd(day, -1, GETUTCDATE()) as date))
).value('(/row/*[local-name()=sql:variable("@sName")]/text())[1]','nvarchar(max)') AS ValueAtColumnName;
有时不能使用动态SQL(在视图中,iTVFs)。在这种情况下,您可以使用XML的功能来处理一般查询:
DECLARE @ColName VARCHAR(100)='name';
SELECT
(
SELECT TOP 1 *
FROM sys.objects
FOR XML PATH('row'),TYPE
).value('(/row/*[local-name()=sql:variable("@ColName")]/text())[1]','nvarchar(max)') AS ValueAtColumnName;
这将获得一行sys.objects
,并返回列name
的值
对于您的查询,这看起来像
Declare @sName nvarchar(max);
SELECT
(
select *
from VPDW.dbo.Fact_Email_MW100
where VesselID = 3763
and (cast(UTClogTime as date) >= cast(DateAdd(day, -1, GETUTCDATE()) as date))
).value('(/row/*[local-name()=sql:variable("@sName")]/text())[1]','nvarchar(max)') AS ValueAtColumnName;
为此,您需要使用动态SQL。能否提供一个简单的示例?还不太熟悉SQL。@GordonLinoff,由于XML能够解析一般定义的查询,因此不需要动态SQL,可以完全内联求解。我给出了一个答案…你需要使用动态SQL来解决这个问题。你能提供一个简单的例子吗?还不太熟悉SQL。@GordonLinoff,由于XML能够解析一般定义的查询,因此不需要动态SQL,可以完全内联求解。我给出了一个答案……完美无瑕。谢谢如果不想满足要求,则应针对目标表的视图验证列名。将对象名称组合到动态SQL语句中时的最佳实践是避免出现奇数名称问题,例如带有空格的
新表
或保留字,如From
@HABO correct and important to note!或者您可以使用XML的通用查询。William,整个查询需要是动态的。。。有一种使用XML的非动态方法(见我的答案)。工作完美无瑕。谢谢如果不想满足要求,则应针对目标表的视图验证列名。将对象名称组合到动态SQL语句中时的最佳实践是避免出现奇数名称问题,例如带有空格的新表
或保留字,如From
@HABO correct and important to note!或者您可以使用XML的通用查询。William,整个查询需要是动态的。。。有一种使用XML的非动态方法(参见我的答案)。