2011-12-15 139 views
0

我怎麼能生成SQL字符串包含一個空字符串: ''SQL撇號

我嘗試這樣做:

DECLARE @TEST NVARCHAR(50),@ COL1 NVARCHAR(50) @ COL2 NVARCHAR(50) SELECT @ COL1 ='A',@ COL2 ='B'

SELECT @TEST ='SELECT''['+ @ COL1 +'],''['+ @ COL2 +' ]'

SELECT @TEST

但字符串結尾看起來像:

選擇 '[A],'[B]

當它需要看起來像:

SELECT' [A],''[B]

謝謝。在SQL字符串

+2

您需要了解:1 SQL注射](http://en.wikipedia.org/wiki/SQL_injection)和2. [參數化查詢](http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or -give-me-death.html) – Oded 2011-12-15 18:40:19

回答

3

兩個單引號被視爲一個轉義的單引號,因此,爲了在輸出生成兩個,你需要把4輸入,就像這樣:

SELECT @TEST = 'SELECT '''' ['+ @COL1 + '], '''' [' + @COL2+ ']' 
+0

謝謝 - 工作! – Rivka 2011-12-15 18:33:41

1

那麼,快速回答是:''''(將它們加倍)

例如SELECT 'XX''''XX'XX''XX

因爲「你爲什麼要這樣做」部分讓我非常緊張。

0

您不需要連接字符串。

SELECT @COL1, @COL2 

應該足夠了。參數@ COL1和@ COL2將被實際值自動替換。

但是,您不能像這樣動態聲明列名稱。參數代表值。通常你會做這樣的事情:如果你打算動態地更改列名

SELECT [Name] FROM mytable WHERE [email protected] 

,那麼你就不能使用單引號都:

SET @sql = 'SELECT [' + @COL1 + '], [' + @COL2 + ' FROM mytable'; 
EXECUTE sp_executesql @sql; 
+0

謝謝,但我想生成一個SQL字符串,它將在執行時選擇一個空字符串以及列別名(參數)。我不想僅僅選擇參數值。 – Rivka 2011-12-15 18:46:40