2つの引数をとるストアドプロシージャを実行したい。最初の引数は常に'%'
で、2番目の引数は最後の作業日です。今日が月曜日の場合、最後の作業日は金曜日です。今日が火曜日で、最後の作業日が月曜日である場合などです。SQL Server - 動的SQLのハイフン
また、動的に置き換えられる日付の前後に'
を追加します。
私はこのコードを思い付いた:私はちょうど私は、としてそれを実行することができ@ppv
を削除した場合
declare @passPar datetime
declare @ppv nvarchar(100)
set @passPar = case
when (DATEPART(WEEKDAY, GETDATE())) = 1 then convert (nvarchar(10),dateadd(day,-2,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 2 then convert (nvarchar(10),dateadd(day,-3,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 3 then convert (nvarchar(10),dateadd(day,-1,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 4 then convert (nvarchar(10),dateadd(day,-1,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 5 then convert (nvarchar(10),dateadd(day,-1,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 6 then convert (nvarchar(10),dateadd(day,-1,getDate()),101)
end
set @ppv = N' Execute spCreateReports '%' + ''' @passPar '''
;
Execute spCreateReports '%', @passPar
。変換 Execute spCreateReports '%', @passPar
、例えば、 Execute spCreateReports '%', 2016-04-27
しかし所望の結果私が使用(およびSSISで働くが、SQLサーバーにOK見えていない)された元のSQLコード Execute spCreateReports '%', '2016-04-27'
である:
declare @passPar datetime
set @passPar = case
when (DATEPART(WEEKDAY, GETDATE())) = 1 then convert (nvarchar(10),dateadd(day,-2,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 2 then convert (nvarchar(10),dateadd(day,-3,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 3 then convert (nvarchar(10),dateadd(day,-1,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 4 then convert (nvarchar(10),dateadd(day,-1,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 5 then convert (nvarchar(10),dateadd(day,-1,getDate()),101)
when (DATEPART(WEEKDAY, GETDATE())) = 6 then convert (nvarchar(10),dateadd(day,-1,getDate()),101)
end
;
Execute spCreateReports '%', @passPar
これを行う方法上の任意のアイデア、素晴らしいことだ
EDIT:
以下の作業コード:私は右のそれを取得する場合、コードとしても、コンパイルされませんが、あなたは変数に動的SQLを割り当てて、それを実行したことがないように見える
declare @passPar nvarchar(50)
set @passPar = case
when (DATEPART(WEEKDAY, GETDATE())) = 1 then convert (nvarchar(10),dateadd(day,-2,getDate()),120)
when (DATEPART(WEEKDAY, GETDATE())) = 2 then convert (nvarchar(10),dateadd(day,-3,getDate()),120)
when (DATEPART(WEEKDAY, GETDATE())) = 3 then convert (nvarchar(10),dateadd(day,-1,getDate()),120)
when (DATEPART(WEEKDAY, GETDATE())) = 4 then convert (nvarchar(10),dateadd(day,-1,getDate()),120)
when (DATEPART(WEEKDAY, GETDATE())) = 5 then convert (nvarchar(10),dateadd(day,-1,getDate()),120)
when (DATEPART(WEEKDAY, GETDATE())) = 6 then convert (nvarchar(10),dateadd(day,-1,getDate()),120)
end
;
Execute spCreateReports '%', @passPar
私はこの問題を理解していません。なぜ2番目のバージョンは機能しませんか?あなたがそれを使用するとどうして失敗するのですか? –
SSISでは、第2版でタスクを実行するだけで何も起こりません。正しく実行されたように見えますが、ストアドプロシージャは実際には実行されません。私はおそらく(たとえそれが日付の前後になくても動作するはずだが)私はそれを追加すべきだと思っている。 – CM2K
より良い質問は単純に次のようになりました。なぜ2番目のコードがSSIS SQLタスクで動作しないのですか(接続がテーブルを切り捨てるという別の作業をしてからうまく動作しています) – CM2K