我想執行一個需要2個參數的存儲過程。第一個參數始終是'%'
,第二個參數是最後一次工作日期。如果今天是星期一,那麼最後的工作日期是星期五,如果今天是星期二,那麼最後的工作日期是星期一,以此類推。SQL Server - 動態sql中的連字符
我想在動態替換日期前後添加'
。
我這個代碼想出了:
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
如果我只是刪除@ppv
然後我可以執行它; Execute spCreateReports '%', @passPar
這轉化爲,例如, Execute spCreateReports '%', 2016-04-27
但期望的結果的是 Execute spCreateReports '%', '2016-04-27'
原來的SQL代碼我用(以及在SSIS不工作,但在SQL服務器看起來確定)爲:
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
如何做到這一點任何想法,將是巨大的
編輯:
下面工作代碼:
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
我不明白這個問題。爲什麼第二個版本不工作?它在使用時如何失敗? –
那麼,在SSIS中,如果我只是用第二個版本執行任務,沒有任何反應。它看起來像它被正確執行,但存儲過程並沒有真正執行。我想也許(即使它應該在日期之前和之後沒有'''),我應該添加它。 – CM2K
或者更好的問題可能只是:爲什麼第二段代碼不能在SSIS SQL任務中工作(連接正在工作,因爲有另一個截斷表的任務,並且工作良好) – CM2K