T-SQL Server 2012 QUOTENAME 问题与第一个字符串实例

T-SQL Server 2012 QUOTENAME issue with first instance of string

我正在尝试使用 QUOTENAME 将返回的字符串的每个部分括在方括号中,但似乎无法找到将字符串的第一个实例括起来的解决方案?

    CREATE TABLE dbo.Products
(
  ProductID INT PRIMARY KEY,
  Name      NVARCHAR(255) NOT NULL UNIQUE
  /* other columns */
);
INSERT dbo.Products VALUES
(1, N'foo'),
(2, N'bar'),
(3, N'kin'),
(4, N'blat');

DECLARE @Split varchar (1000)
SET @Split = ''

SELECT @Split = 
    CASE WHEN @Split = ''
    THEN Name
   ELSE @Split + coalesce(',' + QUOTENAME(Name),'')

    END
  FROM dbo.Products

PRINT @Split

结果:

bar,[blat],[foo],[kin]

我需要 'bar' 也用 [] 括起来。

您连接 dbo.Products 的所有值的方法最好像这样完成:

SELECT STUFF(
(
    SELECT ',' + QUOTENAME(Name)
    FROM dbo.Products
    FOR XML PATH('')
),1,1,'');

但要回答您的实际问题:

您也必须首先使用 QUOTENAME

SELECT @Split = 
    CASE WHEN @Split = ''
    THEN Name <-- Use QUOTENAME here as well
   ELSE @Split + coalesce(',' + QUOTENAME(Name),'')

在您的案例陈述中,您缺少 quotename()

WHEN @Split = ''
    THEN QUOTENAME(Name)

希望对您有所帮助。

最好的问候,
卡尔提克