在同一台服务器上,我有几个具有不同排序规则的数据库。 我正在将 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
-- 甚至是已弃用的 TEXT
和 NTEXT
数据类型)。
关于sql-server - 解析 xml 时整理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41592483/