2011-10-12 19 views
10

SQL Server 2008に一重引用符を格納する方法があるのだろうかと思っていました。複数のレポートを作成していますが、これらのレポートはすべて同じです私が選択しているコードたとえば、「abc」、「def」、「ghi」というコードを使用するレポートと、「jkl」、「mno」、「pqr」というコードを使用するレポートがあります。私はストアドプロシージャの数を減らすことを考えていました。実行するレポートのタイプを選択するために、レポートにパラメータを作成できました。それに基づいて、私は正しいコードを使用します。そこで私はこれらのコードをvarchar変数に格納しようとしていました。その後、私は、ユーザーが選択したパラメータに基づいて適切なvarchar型の変数を使用するつもりだったvarchar変数に一重引用符を格納する

DECLARE @codes1 varchar, @codes2 varchar 
SET @codes1 = ''abc', 'def', 'ghi'' 
SET @codes2 = ''jkl', 'mno', 'pqr'' 

:以下は、私が期待していた機能があります。唯一の問題は、文字列に単一引用符があるため(文字列がSQLの 'IN'ステートメントで使用され、単一引用符が存在する理由)、変数の設定です。

答えて

18

このようにします。はいOdedは正しいです。このための適切な用語は「エスケープ」です。あなたは ''

それを倍にして
DECLARE @codes1 varchar(50), @codes2 varchar(50) 
SET @codes1 = '''abc'', ''def'', ''ghi''' 
SET @codes2 = '''jkl'', ''mno'', ''pqr''' 
+1

別名 '''を' '''でエスケープしてください。 – Oded

+2

1文字の切り捨てを避けるために、変数宣言にも長さが必要です。 –

+0

ありがとう!これはまさに私が必要としていたものです!また、追加されたコメントのために感謝@Martin!私もこれが必要でした! –

0

を単一引用符'を逃れることができるハードコーディング値を避けるようにしてください。これらの値をグループ化する方法とともに保持するテーブルを作成します。

Table CodeGroups 
GroupNumber | Codes 
     1 | abc 
     1 | def 
     1 | ghi 
     2 | kkl 
     2 | mno 
     2 | pqr 

この方法でユーザーにのみあなたは、コードの文字列を表にCodeGroupsテーブルをリンク= 1

GroupNumberを選択しなければなりません。別のコードを追加するために必要なのは、このテーブルにエントリを作成してグループ番号を付けることだけです。

0

倍増するだけで、単一のqoute問題を回避します。

値Varchar2(10):= '' abc "; ---エラーが発生します。

値Varchare(10):= '' 'abc' ''; ---あなたの問題を解決します。

0
      int varId = "1"; 
          String varItem = "Google's root"; 

          String strSQL = "INSERT INTO table(" 
              + "id," 
              + "item" 
              +")" 
              + "VALUES('" + varId 
              + "', '" + varItem 
              + "')"; 
+0

SQL Server 2008を使用して言及されたOP - あなたのソリューションはSQL Server 2008で動作することを意図していますか?また、あなたはそれの上にあなたの解答の説明を提供することをお勧めします。 –

関連する問題