在变量中使用引号在 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 中构造字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中的转义字符

使用javascript从字符串中删除双引号[重复]

关于引号的总结

构建字符串在两个变量之间添加双引号[重复]

SQL语句中“与‘

SQL语言中的单引号与双引号区别