【发布时间】:2017-01-11 16:11:24
【问题描述】:
我有一个 SQL 查询当前获取存储在我的数据库中的列中的值,如下所示:
SELECT
@filevalue = (CAST(REPLACE(CAST(de.TRIGGERS_XML_DATA AS VARCHAR(MAX)), 'encoding="utf-16"', '') AS XML).value('(//value)[1]', 'NVARCHAR(max)')),
@filecontent = de.ENVIRONMENT_ID
FROM
dbo.DEPLOYMENT_ENVIRONMENT AS de
WHERE
de.ENVIRONMENT_ID = CAST(REPLACE(CAST(@filevalue AS numeric(19, 0)), 'encoding="uft-16"', '') AS numeric(19, 0))
.value('(//value)[1]') 所在的部分是问题所在,因为有时会有多个值节点。我试图将一个计数器和值节点连接在一起,但是当我这样做时,返回的错误是值需要是一个字符串而不是 varchar:.value(@ValueNodes, 'NVARCHAR(max)'))
那么我怎样才能成功地循环通过 xml 来获得我的结果呢?我这样做的问题是第一个值并不总是我需要的并且会给出错误(空值并且无法转换类型)。
【问题讨论】:
-
您需要存储所有值吗?或者只是循环,直到找到所需的?
-
不是必需的,但所需的值可以是任何值加上我认为的最大节点数为 5(我看到的大多数是 3),所以如果它将它们全部存储起来可能会更好。
标签: sql-server xml