1

クエリ1:

  SET @sql2 = 'insert into TempReport   
  select ID, max(TransactionTime),0 from  ClubTransaction with (nolock)  
  where ClubcardID in (select ClubcardID from TempCC)   
  and ClubcardTransaction.OfferID  not in (119,120,121)  
  group by ClubcardID' 
  exec (@Sql2)

クエリ2:

  delcare @OfferID varchar(50)
  set   OfferID='1,112,445,'  
  SET @sql2 = 'insert into TempReport   
  select ID, max(TransactionTime),0 from  ClubTransaction with (nolock)  
  where ClubcardID in (select ClubcardID from TempCC)   
  and ClubcardTransaction.OfferID not in (Select Item From dbo.fnSplit(@OfferID,'','')   
  group by ClubcardID'    
  exec (@Sql2)

クエリ1は正常に機能します。query2では、関数fnSplitに渡す変数deに置き換えています。ここで、値をコンマで区切って分割します。エラーメッセージが表示されますMust declare the scalar variable "@OfferID"。ここで問題がどこにあるか教えてください。

4

1 に答える 1

2

外部から値を入力し、'を"に置き換える必要があります。

クエリ2:

  declare @OfferID varchar(50)
  set   OfferID='1,112,445,'  
  SET @sql2 = 'insert into TempReport   
  select ID, max(TransactionTime),0 from  ClubTransaction with (nolock)  
  where ClubcardID in (select ClubcardID from TempCC)   
  and ClubcardTransaction.OfferID not in (Select Item From dbo.fnSplit(' + replace(convert(varchar(4000), @OfferID), '''', '''''') + ',"","")   
  group by ClubcardID'    

  exec (@Sql2)

別の解決策(およびより良い解決策)は、sp_executesqlを使用することです


動的SQLはSQLインジェクションを行う方法であり、使用を避ける必要があることに注意してください。

于 2012-05-02T09:01:55.047 に答える