2017-04-20 73 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]) 

感謝您的幫助&建議。