2017-04-20 149 views
0

我需要按列顺序传递列名作为[ID-ColumnName]作为列名。如何处理SQL列名中额外的方括号

例:

Select [ID-ColumnName],[ID2-ColumnName2] FROM TABLE1 ORDER BY [ID-ColumnName] 

问题是,如果的ColumnName是动态的名字带有一个开/关方括号如列[名或列]名称

在这种情况下的SQL语句被打破;问题是我不知道有多少这样的开/关方括号可以来。

在我的方案中强制使用方括号包括列名。

请帮我处理这种情况。

+0

可以请您写下您的尝试密码 –

+0

看看这里http://stackoverflow.com/questions/10454597/how-do-i-query-column-names-that-c​​ontain-square-brackets – ventik

+2

你是在找[ 'QUOTENAME'](https://docs.microsoft.com/en-us/sql/t-sql/functions/quotename-transact-sql)? –

回答

0

所有,

我能解决这个问题就像如下:

创建具有名方括号表(您可以选择开启/关闭括号或单开的任意组合/关)。

CREATE TABLE [dbo].[TestTable](
    [OF-[Test [Name]]]]] [nvarchar](100) NULL, 
    [Name] [nvarchar](100) NULL 
) ON [PRIMARY] 

GO 

而准备的动态查询和使用QUOTENAME()功能由@Damien_The_Unbeliever的建议;但要确保QUOTENAME()函数不应该作为字符串给出;发布执行查询。

DECLARE @orderBy NVARCHAR(MAX),@sql NVARCHAR(MAX) 

SET @orderBy = N' ORDER BY '+QUOTENAME('OF-[Test [Name]]')+' ASC' 
SET @sql=N'select '+QUOTENAME('OF-[Test [Name]]')+' from TestTable' 
--PRINT(@sql [email protected]) 
EXEC(@sql [email protected]) 

感谢您的帮助&建议。