在变量中使用引号在 SQL 中构造字符串 [重复]
Posted
技术标签:
【中文标题】在变量中使用引号在 SQL 中构造字符串 [重复]【英文标题】:Using quotes in a variable to construct a string in SQL [duplicate] 【发布时间】: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
【参考方案1】:
没有提供最小的可重现示例。
所以我正在拍摄臀部。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, XMLColumn XML);
INSERT INTO @tbl (XMLColumn) VALUES
(N'<ImportFormXml>
<Resolution>Some kind of resolution</Resolution>
<Name>Just a name</Name>
</ImportFormXml>');
-- DDL and sample data population, end
SELECT ID
, c.value('local-name(*[1])','VARCHAR(50)') + ': ' +
c.value('(Resolution/text())[1]','VARCHAR(50)') AS Col1
, c.value('local-name(*[2])','VARCHAR(50)') + ': ' +
c.value('(Name/text())[1]','VARCHAR(50)') AS Col2
FROM @tbl
CROSS APPLY XMLColumn.nodes('/ImportFormXml') AS t(c);
输出
+----+-------------------------------------+-------------------+
| ID | Col1 | Col2 |
+----+-------------------------------------+-------------------+
| 1 | Resolution: Some kind of resolution | Name: Just a name |
+----+-------------------------------------+-------------------+
【讨论】:
以上是关于在变量中使用引号在 SQL 中构造字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章