1

like動的パラメーター化クエリでキーワードを使用したいと考えています。クエリを SQL インジェクションから保護したいので、値を渡したくありません。代わりに、クエリの実行中に基準を渡したいのですが、

これを行う方法はありますか?

SELECT 
  ComposeMail.ID,
  ComposeMail.DateTime, 
  ComposeMail.Subject, 
  ComposeMail.CreatedBy, 
  ComposeMail.ReceiverStatus,
  Users.Name,
  ROW_NUMBER() OVER(ORDER BY '+ @p_SortExpression +') AS Indexing
FROM 
  ComposeMail 
INNER JOIN
  Users
ON
  ComposeMail.CreatedBy = Users.ID
WHERE 
  (ToReceipientID=@p)
  AND (
    ReceiverStatus=3 
    OR ReceiverStatus=4
  )
  AND (
    (Subject Like ''%' + @p3 + '%'') 
    OR (Body Like ''%' + @p3 + '%'') 
    OR (Name Like ''%' + @p3 + '%'')
  )

これは私の動的クエリ文字列です。ここで値を渡したくありません。

4

2 に答える 2

5

動的クエリでのインジェクションを防ぐために、常にこのようなことをしたいと考えています (例で ' + @var + ' を実行する代わりに)

DECLARE @query nvarchar(2000),
        @paramList nvarchar(2000)

SET @query = 'SELECT * FROM dbo.Orders WHERE custLastName LIKE ''%'' + @custLastName + ''%'''
SET @paramList = '@custLastName varchar(30)'

EXEC SP_EXECUTESQL @query, @paramList, @custLastName

編集: LIKE を使用するように更新された例

于 2009-07-08T12:36:59.277 に答える
0
 WHERE        (LastName LIKE N'%' + @Family + N'%') OR
                         (RegNo LIKE N'%' + @Codemeli + N'%')

動的SQLクエリのように

于 2017-01-04T10:01:01.953 に答える