XML查询将别名视为DB

时间:2016-11-24 18:51:32

标签: sql-server xml sql-server-2008 tsql

运行它,将信息传递到macs-mac标签之间的RICHTEST表中:

INSERT INTO [dbo].RichTest
SELECT doc.col.value('(.)[1]', 'nvarchar(50)') 
FROM @RichTests.nodes('/macs/mac') AS doc(col) 
WHERE NOT EXISTS (SELECT 1 FROM [RichTest] WHERE [Name] = doc.col.value('(.)[1]', 'nvarchar(50)')

获取此信息:

  

System.Data.SqlClient.SqlException:Database' Doc'因为离线而无法打开。

请注意,当它在SSMS中运行时,它会因DB' Doc'而失败。错误概述如上。并在运行以下查询时:

Select @@version 

返回

Microsoft SQL Server 2008 (SP3) - 10.0.5538.0 (X64)

1 个答案:

答案 0 :(得分:1)

您在结尾处缺少右括号。否则它在SQL Server 2008R2和SQL 2016 SSMS上运行正常。试试这个:

SELECT doc.col.value('(.)[1]', 'nvarchar(50)') 
    FROM @RichTests.nodes('/macs/mac') AS doc(col) 
    WHERE NOT EXISTS (SELECT 1 FROM [RichTest] WHERE [Name] = doc.col.value('(.)[1]', 'nvarchar(50)'));

如果仍然出现错误,请尝试修补SSMS(或安装较新版本)。另请注意,SQL Server 2008有一个SP4,但我怀疑这是问题所在。您的SSMS更可能是RTM ...单击帮助,在SSMS中查看您的客户端版本。