2016-08-06 18 views
1

SQL Serverで動的クエリの実行にダミー列を追加する方法はありますか?SQL Serverで動的クエリの実行にダミー列を追加する方法はありますか?

declare @sql nvarchar(max) 

declare @centerid int 

@sql= 'Select ms.SetTitle,se.Quantity as ccp ,'' as dlp from StockEntry_Center se 
      inner join Mast_Set ms on se.SetID=ms.SetID where se.IsDeleted=''False'' and se.CenterID='+convert(nvarchar,@centerid) 

exec(@sql) 

上記の動的クエリでは、ダミー列'' as dlpを追加します。しかし、それはエラーを示しています。前もって感謝します。

+0

'SET @sql = 'query here''を使用してください。エラーを表示してください。 – NEER

+2

*** ***エラーはどうなりますか? ** –

+0

実際には空の文字列であるダミー列を追加しようとしています。この問題の可能性にかかわらず、非常に**非常に**悪い習慣です。 – FDavidov

答えて

4

あなたのダイナミックSQLには、この場合はInteger変数しかありませんが、文字列変数を使用してこの連結を行い、潜在的なSQLインジェクション攻撃にさらされた場合は、残念ながら安全である方が良いでしょう。

+0

はいこれも正解です。ありがとうございます@ M.Ali – user6180198

0

'''' as dmpまたはNULL as dmpを使用してください。私はあなたが引用符のためにエラーを持っていると確信しています。

declare @sql nvarchar(max), @centerid int = 100 

SET @sql= N' Select ms.SetTitle 
        ,se.Quantity as ccp 
        ,'''' as dlp 
      from StockEntry_Center se 
      inner join Mast_Set ms on se.SetID = ms.SetID 
      where se.IsDeleted=''False'' 
      and se.CenterID = @centerid' 

Exec sp_executesql @sql 
        ,N'@centerid int' 
        ,@centerid 

使用sp_executesqlをというし、連結パラメータなどのパラメータを渡す:gofr1はすでに説明しましたが、私はまた、あなたのクエリ内の他のいくつかの変更を加えることと同じようにあなたがいるため、単一引用符のエラーを取得している

+0

''' '''は一重引用符に解決されます。それは '' '' '' ''でなければなりません。 – FDavidov

+0

@FDavidov '' '+ @ param +' ''のように引用符で囲む必要がある他の変数と連結する場合は、 'param'を与える​​ように '' ''にする必要があります。 – gofr1

+0

質問には、「Select ms.SetTitle、se.Quantity as ccp」と「dlp ...」があり、これはdlpとして 'Select ms.SetTitle、se.Quantity as ccp 'に変換されます。 .. .. 'は明らかに誤りです。 – FDavidov

0

再読み込みあなたの選択(およびそれが簡単にウォークスルーすること):

@sql = 'Select ms.SetTitle,se.Quantity as ccp , 
       ''      as dlp 
      from StockEntry_Center se 
     inner join 
       Mast_Set   ms 
     on  se.SetID = ms.SetID 

    where se.IsDeleted=''False'' 
     and se.CenterID='+convert(nvarchar,@centerid) ; 

これは、に変換します。あなたが見ることができるように

Select ms.SetTitle,se.Quantity as ccp , 
     '      as dlp 
     from StockEntry_Center se 
    inner join 
      Mast_Set   ms 
    on  se.SetID = ms.SetID 

where se.IsDeleted=''False'' 
    and se.CenterID=convert(nvarchar,@centerid) ; 

、で単一'がありますas dlpの左。

関連する問題