sql-server - 解析 xml 时整理

标签 sql-server xml sql-server-2012 sql-server-2008-r2 collation

在同一台服务器上,我有几个具有不同排序规则的数据库。 我正在将 xml 解析为

CREATE TABLE #tblDocuments
(
    Document varchar(5) COLLATE DATABASE_DEFAULT
   ,DocCode varchar(15) COLLATE DATABASE_DEFAULT
   ,Ammount decimal(18,2)
   );

IF @@ERROR <> 0
    GOTO ErrorHandl;

INSERT INTO #tblDocuments
(
    Document
   ,DocCode
   ,Ammount
)

SELECT 
    Tbl.Col.value('@DocType','varchar(3)') AS Document
   ,Tbl.Col.value('@DocCode','varchar(15)') AS DocCode
   ,Tbl.Col.value('@Ammount','decimal(18,2)') AS Ammount
FROM 
    @xmlData.nodes('/Documents/document') AS Tbl(Col);

有没有一种方法可以在不首先创建具有预定义排序规则的表的情况下解析 xml。类似的东西(我知道这段代码不起作用)

SELECT 
    Tbl.Col.value('@DocType','varchar(3) COLLATE DATABASE_DEFAULT') AS Document
   ,Tbl.Col.value('@DocCode','varchar(15) COLLATE DATABASE_DEFAULT') AS DocCode
   ,Tbl.Col.value('@Ammount','decimal(18,2) COLLATE DATABASE_DEFAULT') AS Ammount
INTO #tblDocuments
FROM 
    @xmlData.nodes('/Documents/document') AS Tbl(Col);enter code here

提前致谢

最佳答案

COLLATE 放在 .value() 函数之外:

SELECT 
    Tbl.Col.value('@DocType','varchar(3)') COLLATE DATABASE_DEFAULT AS [Document]
   ,Tbl.Col.value('@DocCode','varchar(15)') COLLATE DATABASE_DEFAULT AS [DocCode]
   ,Tbl.Col.value('@Ammount','decimal(18,2)') AS Ammount
INTO #tblDocuments
FROM 
    @xmlData.nodes('/Documents/document') AS Tbl(Col);
    enter code here

此外,除了字符串数据类型(CHAR/VARCHAR/NCHAR/NVARCHAR -- 甚至是已弃用的 TEXTNTEXT 数据类型)。

关于sql-server - 解析 xml 时整理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41592483/

相关文章:

从 varchar 到 uniqueidentifier 的 SQL 转换在 View 中失败

sql - SQL Server CTE 中的 WHERE EXISTS 中的引用列?

sql - 我可以在 sql server 2008 profiler 中监控特定表的性能吗

sql - 如何用T-SQL编写传输

java - 共享操作提供程序未显示

sql-server - 外键与同一张表中的主键链接

sql-server - 如何在 SQL Server Docker 容器中使用 Windows 身份验证

sql-server - SQL Server : How to ignore referential integrity until COMMIT?

Java + 编写 XML

xml - 带有 XPath 和多个命名空间的 SelectSingleNode