0

このようなアプリの SQL ステートメントで正規表現を使用します

SELECT * FROM テーブル WHERE id = {{REPLACEME}}

ただし、その文字列を置き換えるパラメーターを指定していない場合があります。何にでも合うものに置き換える方法はありますか?* を試しましたが、うまくいきません。

4

6 に答える 6

7
  1. SELECT * FROM table WHERE id = idnull 以外のすべての行に一致しますid
  2. SELECT * FROM table WHERE id = id OR id IS NULLすべての行に一致します。

idおそらく主キーなので、おそらく前者を使用できます。

于 2009-10-02T18:39:10.083 に答える
2

私のソリューションを例で説明することしかできません。は@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 行が取得されます。これを現在の正規表現ソリューションにすばやく適応させることができるはずです。@AllRecid

于 2009-10-02T18:40:08.493 に答える
2

{{REPLACEME}} を次のように置き換えます

[someValidValueForYouIdType] OR 1=1
于 2009-10-02T18:40:28.177 に答える
1

Regex-Replace オプションを使用すると、SQL インジェクション攻撃を受ける可能性があります。

あなたの言語がパラメーター化されたクエリをサポートしていると仮定して、Jacob の回答のこの修正版を試してください。

SELECT * FROM table WHERE (id = @id OR @id IS NULL)

問題は、常に @id 値を提供する必要があることです。

于 2009-10-02T18:43:55.690 に答える
1
SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)
于 2009-10-02T18:51:10.293 に答える
0

使用している言語がわからないため、このコードはちょっと怖いですが...


var statement = "SELECT * FROM table";

If REPLACEME is not empty Then
   statement += " WHERE id = {{REPLACEME}}"
End If


于 2009-10-02T18:46:22.627 に答える