我想执行一个需要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