このようなアプリの SQL ステートメントで正規表現を使用します
SELECT * FROM テーブル WHERE id = {{REPLACEME}}
ただし、その文字列を置き換えるパラメーターを指定していない場合があります。何にでも合うものに置き換える方法はありますか?* を試しましたが、うまくいきません。
SELECT * FROM table WHERE id = id
null 以外のすべての行に一致しますid
SELECT * FROM table WHERE id = id OR id IS NULL
すべての行に一致します。id
おそらく主キーなので、おそらく前者を使用できます。
私のソリューションを例で説明することしかできません。は@AllRec
パラメータです:
Declare @AllRec bit
set @AllRec = {0|1} --as appropriate
SELECT *
FROM table
WHERE
(
id = {{REPLACEME}}
and @AllRec = 0
) OR (
@AllRec = 1
)
このソリューションでは、 is 1 の場合、フィルター@AllRec
を無視してすべてが返されます。がゼロの場合、id
フィルターが適用され、1 行が取得されます。これを現在の正規表現ソリューションにすばやく適応させることができるはずです。@AllRec
id
{{REPLACEME}} を次のように置き換えます
[someValidValueForYouIdType] OR 1=1
Regex-Replace オプションを使用すると、SQL インジェクション攻撃を受ける可能性があります。
あなたの言語がパラメーター化されたクエリをサポートしていると仮定して、Jacob の回答のこの修正版を試してください。
SELECT * FROM table WHERE (id = @id OR @id IS NULL)
問題は、常に @id 値を提供する必要があることです。
SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)
使用している言語がわからないため、このコードはちょっと怖いですが...
var statement = "SELECT * FROM table";
If REPLACEME is not empty Then
statement += " WHERE id = {{REPLACEME}}"
End If