2009-06-30 13 views
5

SQLエスケープ「」

@query varchar(max) 

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

EXEC(@query) 

問題は、クエリが...WHERE [Name] = Karlとして実行される。すなわち、何らかの理由で'Karl'周りのアポストロフィは、エスケープされませんということです失敗します。

誰かが提案していますか? =この SETの@queryよう

おかげ

カール

+0

これはSQL Server 2008の権利ですか? MySQL、PostgreSQL、SQLite、またはSQLの他の変種ではありませんか? – MiffTheFox

+3

文字列@queryを印刷するとどうなりますか? – Tetraneutron

答えて

0

ん 'SELECT * [名前]テーブルから= ''' 'カール' '' '

+0

Karlがデータベースに格納されていない限り、Karlが「Karl」のように彼の名前の前後に1つの引用符で格納されていないと、これは機能しません。SELECT * FROM Table WHERE [Name] = '' Karl '' –

+0

テーブルのWHERE [名前] = '' ''カール '' '' '' 'のようなものです – KuldipMCA

-1

は、単にアポストロフィをエスケープ'エスケープバーを使用して、\「\「カール\」この「テーブル[名] = SELECT * FROM」のような」

は、それはこれが私の上で動作

+3

これはSQL Serverのt-sqlでは動作しません –

2

を役に立てば幸いSQL Server Management Studioのからマシン:

@query varchar(max) 

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

EXEC(@query) 
+3

Karlが "Karl"のような彼の名前の前後に2つの単一引用符でデータベースに格納されていない限り、実際のクエリは次のようになります:SELECT * FROM Table WHERE [Name] = '' 'Karl '' ' –

3

あなたには、いくつかの人々もQUOTENAME()関数の使用を提唱し、SQL Serverで文字データを逃れることができるいくつかの方法があります。

このトピックの分野を確実に理解したい場合は、経験豊富なSQL ServerデベロッパーがDynamic Tを組み込むために使用できるさまざまな方法についての重要な読者であると考えることをお勧めします-SQLをコーディングに追加します。

The Curse and Blessings of Dynamic SQL

+0

同じ場所私は人々を指しています。 – dverespey

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) 

単一引用符が表示されているように、あなたは、隣接する2つの単一引用符を持っている必要があります。次の例のように、単一引用符と単一引用符をエスケープ:とき、文字列内のリテラル

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 
関連する問題