【问题标题】:Using quotes in a variable to construct a string in SQL [duplicate]在变量中使用引号在 SQL 中构造字符串 [重复]
【发布时间】: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


【解决方案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 |
+----+-------------------------------------+-------------------+

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2019-06-19
    相关资源
    最近更新 更多