2009-06-30 42 views
5

我想這樣做來運行SQL 2008的查詢:SQL ESCAPE「」

@query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ' 'Karl' ' ' 

EXEC(@query) 

的問題是,由於某種原因,周圍'Karl'撇號沒有得到逃脫,即查詢的執行過程...WHERE [Name] = Karl並失敗。

任何人有一個建議?

感謝

卡爾

+0

這是SQL Server 2008,對不對?不是MySQL或PostgreSQL或SQLite或任何其他SQL變體? – MiffTheFox 2009-06-30 06:50:56

+3

如果您打印字符串@query,您會看到什麼? – Tetraneutron 2009-06-30 06:53:20

回答

0

做這樣 SET @query = 'SELECT * FROM表WHERE [名] = ''''卡爾 '' ''

+0

這是不行的,除非卡爾之前,他的名字,如「卡爾」,因爲它會導致實際的查詢中後存儲在數據庫中的一個單引號:SELECT * FROM表WHERE [名] =「」卡爾' – 2009-06-30 14:42:28

+0

thne末 不喜歡這一套@query增加一個報價=「SELECT * FROM表WHERE [名] =‘’」「卡爾」「」「」」像這樣 – KuldipMCA 2009-07-01 04:49:27

-1

只需逃脫撇號通過使用轉義條\這樣的 'SELECT * FROM表WHERE [名] =' \ '\卡爾' ''

希望它可以幫助

+3

不會在SQL Server的T-SQL工作 – 2009-06-30 14:37:11

2

這工作對我從SQL Server Management Studio中機:

@query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ''''''Karl''''''' 

EXEC(@query) 
3

有幾種方法,你可以在SQL Server轉義字符數據,甚至有人主張用的QUOTENAME()功能。

如果你真的想要對這個主題領域有深入的理解,那麼我建議你看看有經驗的SQL Server開發人員認爲什麼是必要的閱讀方法,你可以使用不同的方法將Dynamic T -SQL進入你的編碼。

The Curse and Blessings of Dynamic SQL

1

嘗試:

DECLARE @query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ''Karl''' 

PRINT 'when in doubt, print the query out: '+ISNULL(@query,'') 
EXEC(@query) 

爲了有一個單引號出現,你需要有兩個相鄰的單引號。你逃單引號用單引號,例如:

PRINT ''''  --will print a one single quote 
PRINT '''''' --will print two single quotes 
PRINT 'can''t' --will print can't 
0

雙單引號(「」)的報價會像一個單引號的字符串時,裏面的文字。

您是否嘗試過使用變量?

declare @karl_name varchar(10); 
set @karl_name = '''Karl'''; 

SELECT * FROM Table WHERE [Name] = @karl_name 
0

這工作:

create table #demo([Name] varchar(max)) 
insert into #demo([Name]) values('''Karl''') 
insert into #demo([Name]) values('Karl') 
declare @query varchar(max) 
set @query = 'SELECT * FROM #demo WHERE [Name] = ''''''Karl''''''' 
EXEC(@query) 

輸出:

'Karl' 

但如果 '卡爾' 是可變文本,強烈建議使用這樣的事情,而不是:

declare @query nvarchar(max) 
declare @param varchar(max) 
set @param = N'''Karl''' 
set @query = N'SELECT * FROM #demo WHERE [Name] = @param' 
exec sp_executesql @query, N'@param varchar(max)', @param