2016-08-25 82 views
1

変数として列名とテーブル名を入力することについてthis postを読んでいます。 大括弧で囲まれた列名とテーブル名が必要です。私は何人かの人々がこれを行う見た:SQL Serverで角括弧をエスケープする

@sql = 'SELECT [' + @column_name + '] FROM ...' 

私は次のように変数に角括弧を入れてみました:私はhereが述べたように、角括弧をエスケープするために、[[]使用している

CREATE PROCEDURE [dbo].[find_most_frequent] 
    @table_in VARCHAR, 
    @col_2 VARCHAR 
AS 
BEGIN 
    DECLARE @sql NVARCHAR(4000); 

    SET @sql = 
--start of code 
'SELECT' + 
     @col_2 + 
    ' FROM ' + @table_in + 
' GO' 
--end of code  
    print @sql 
    EXEC SP_EXECUTESQL @sql 
END 
GO 

EXEC [dbo].[find_most_frequent] 
     @table_in = '[[]dbo].[[]t1]' 
     ,@col_2 = '[[]c1]' 
GO 

。しかしそれは動作します、@ sqlは

SELECT[ FROM [ GO 

誰か助けてくださいできますか?ありがとう!

答えて

2

VARCHARの|オブジェクトの引用については[(N MAX)] Nはデータ定義または変数宣言ステートメントで指定されていない

、デフォルトの長さは1

https://msdn.microsoft.com/en-AU/library/ms176089.aspx

+0

nice - ありがとうございました! –

1

あります名前には、正確にそれを行うSQL Serverの関数があります:quotename()

入力が128文字を超えると、関数はNULLを返すという厄介な癖があるので注意してください。オブジェクトや列の名前を引用するときは発生しませんが、他の場合は起動する可能性があります。