Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:从字符串头获取列数据_Sql Server_Tsql - Fatal编程技术网

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的非动态方法(参见我的答案)。