SQL Server 2008で単一引用符を保存する方法があるかどうか疑問に思っていました。いくつかのレポートを作成していますが、これらのレポートはまったく同じですが、選択するコードが異なるだけです。たとえば、1つのレポートはコード「abc」、「def」、「ghi」を使用し、別のレポートはコード「jkl」、「mno」、「pqr」を使用します。作成する必要があるストアドプロシージャの数を減らすことを考えていました。レポートにパラメーターを作成して、実行するレポートの種類を選択できます。これに基づいて、私は正しいコードを使用します。したがって、これらのコードをvarchar変数に格納しました。以下は私が望んでいた機能です:
DECLARE @codes1 varchar, @codes2 varchar
SET @codes1 = ''abc', 'def', 'ghi''
SET @codes2 = ''jkl', 'mno', 'pqr''
次に、ユーザーが選択したパラメーターに基づいて適切なvarchar変数を使用しました。唯一の問題は、文字列に単一引用符が含まれるため、変数を設定することです(文字列はSQL 'IN'ステートメントで使用され、それが単一引用符が存在する理由です)。
このような。はいOdedは正しいです。これの適切な用語は「脱出」です。単一引用符をエスケープできます'
2倍にする''
DECLARE @codes1 varchar(50), @codes2 varchar(50)
SET @codes1 = '''abc'', ''def'', ''ghi'''
SET @codes2 = '''jkl'', ''mno'', ''pqr'''
値をハードコーディングしないようにしてください。これらの値とそれらをグループ化する方法を保持するテーブルを作成します。
Table CodeGroups
GroupNumber | Codes
1 | abc
1 | def
1 | ghi
2 | kkl
2 | mno
2 | pqr
この方法では、ユーザーはGroupNumber = 1を選択するだけで済みます。
CodeGroupsテーブルを、コード文字列を含むテーブルにリンクします。別のコードを追加するために必要なのは、このテーブルにエントリを作成し、グループ番号を与えることだけです。
単一引用符の問題を2倍にするだけで回避できます。
値Varchar2(10):= '' abc ''; ---エラーになります。
値Varchar(10):= '' 'abc' ''; ---問題を解決します。
int varId = "1";
String varItem = "Google's root";
String strSQL = "INSERT INTO table("
+ "id,"
+ "item"
+")"
+ "VALUES('" + varId
+ "', '" + varItem
+ "')";