【发布时间】:2021-12-14 17:36:12
【问题描述】:
我有一个从 XML 中提取的字符串。它正在从记录中提取单个值。调用项目时唯一改变的部分是字段名称。
例如,下面的第一个提取项目的“分辨率”, 下面的第二个提取项目的“名称”:
XMLData.value('(ImportFormXml/Resolution)[1]','VARCHAR(50)') AS Resolution
XMLData.value('(ImportFormXml/Name)[1]','VARCHAR(50)') AS Name
我想声明一个变量并将其用作以下两种方式之一。
方式 1(首选)
DECLARE
@Var1 Varchar(50)
SET @Var1 = 'XMLData.value('(ImportFormXml/' [BE ABLE TO INSERT NAME HERE...THIS CAN'T BE ANOTHER VARIABLE]')[1]','VARCHAR(50)')
SELECT
@Var1 INSERT 'Resolution' AS Resolution
, @Var2 INSERT 'Name' AS Name
From TableX
方式 2
DECLARE
@Var1 Varchar(50)
@Var2 Varchar(50)
SET @Var1 = 'XMLData.value('(ImportFormXml/'
SET @Var2 = ')[1]','VARCHAR(50)')
SELECT
@Var1 + 'Resolution' + @Var2 AS Resolution
, @Var1 + 'Name' + @Var2 AS Name
From TableX
【问题讨论】:
-
提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。
-
当你说这不能是另一个变量时,实际上它可以:你可以在 XQuery 中直接使用
sql:variable("@someVariable"),你可以把它放在一个节点谓词中。如果您更好地解释您要实现的目标,则可能有比链接副本更好的解决方案。你可以做例如XMLData.value('(ImportFormXml/*[sql:variable("@nodeName")])[1]','VARCHAR(50)'),注意这不需要动态SQL
标签: sql-server xml string variables