Sql XQuery[proposal.Data.value()]:在“@.”附近有语法错误是必需的

Sql XQuery[proposal.Data.value()]:在“@.”附近有语法错误是必需的,sql,sql-server,xml,coalesce,Sql,Sql Server,Xml,Coalesce,我有一个如下的查询,无法将参数传递到xml列 DECLARE @ConCatenateString NVARCHAR(MAX); DECLARE @QuestionNames varchar(50) =@QuestionName; SELECT @ConCatenateString = COALESCE(@ConCatenateString + ' ', '') + P2.ApprovalNumber FROM (SELECT DISTINCT IS

我有一个如下的查询,无法将参数传递到xml列

DECLARE @ConCatenateString NVARCHAR(MAX); 
DECLARE @QuestionNames varchar(50) =@QuestionName;

SELECT 
    @ConCatenateString = COALESCE(@ConCatenateString + ' ', '') + P2.ApprovalNumber
FROM 
    (SELECT DISTINCT  
         ISNULL(pp.Data.value('(/*/Answers/AnswersList/Entry[@key="[sql:variable("@QuestionNames")]"]/value)[1]', 'nvarchar(max)'),'') AS ApprovalNumber 
     FROM 
         proposal AS pp      
     WHERE
         pp.ProposalId = @ProposalId 
         AND pp.productid = @ProductId
         AND (pp.proposalstatusid = '4' -- declined
              OR pp.proposalstatusid = '1' -- approved
             )
         AND pp.[starteffectivedate]>= '2017-01-01 00:00:00' 
         AND pp.[starteffectivedate] <= '2017-12-31 23:59:59') P2
错误:

Msg 9303,16级,状态1,程序连接批准号,第15行 XQuery[proposal.Data.value]:在“@.”附近有语法错误是必需的


您在sql:variable周围有一些额外的QOUTE和[]

这很有效

DECLARE @xml XML='<root><a test="a">A</a><a test="b">B</a></root>';
DECLARE @SearchFor NVARCHAR(10)='a';
SELECT @xml.value(N'(/root/a[@test=sql:variable("@SearchFor")]/text())[1]','nvarchar(max)')
尝试将此更改为

DECLARE @xml XML='<root><a test="a">A</a><a test="b">B</a></root>';
DECLARE @SearchFor NVARCHAR(10)='a';
SELECT @xml.value(N'(/root/a[@test="sql:variable("@SearchFor")"]/text())[1]','nvarchar(max)')
。。。你会得到和你提到的一样的错误