从字符串动态sql转换日期和/或时间时,转换失败
我运行了一点动态SQL,当我手动写入变量时,它运行得很好,但是当我将它们从手动写入的变量更改为实际变量时,就会出现上面的错误 代码是:从字符串动态sql转换日期和/或时间时,转换失败,sql,sql-server-2008,dynamic,Sql,Sql Server 2008,Dynamic,我运行了一点动态SQL,当我手动写入变量时,它运行得很好,但是当我将它们从手动写入的变量更改为实际变量时,就会出现上面的错误 代码是: set @query = 'SELECT eng, ' + @colsNull + ' from ( select eng, [count], cast(weekof as date) weekof from dbo.RPT_ENG_WEEK (''1 jan 2013'', '
set @query = 'SELECT eng, ' + @colsNull + '
from
(
select eng, [count], cast(weekof as date) weekof
from dbo.RPT_ENG_WEEK (''1 jan 2013'', ''9 apr 2013'', ''1 jan 2013'', ''9 apr 2013'')
) x
pivot
(
sum([count])
for weekof in (' + @cols + ')
) p '
很好,但只要我把它改成
set @query = 'SELECT eng, ' + @colsNull + '
from
(
select eng, [count], cast(weekof as date) weekof
from dbo.RPT_ENG_WEEK ('+@from+', '+@to+', '+@start+', '+@end+')
) x
pivot
(
sum([count])
for weekof in (' + @cols + ')
) p '
我得到了错误。我也试过了
set @query = 'SELECT eng, ' + @colsNull + '
from
(
select eng, [count], cast(weekof as date) weekof
from dbo.RPT_ENG_WEEK ((select CONVERT(DATE'+@from+',105)), (select CONVERT(DATE'+@to+',105)), (select CONVERT(DATE'+@start+',105)), (select CONVERT(DATE'+@end+',105)))
) x
pivot
(
sum([count])
for weekof in (' + @cols + ')
) p '
但是没有用
也尝试过
from dbo.RPT_ENG_WEEK ((select CONVERT(DATE'''+@from+''',105)), (select CONVERT(DATE'''+@to+''',105)), (select CONVERT(DATE'''+@start+''',105)), (select CONVERT(DATE'''+@end+''',105)))
及
如果
@from
是这样的字符串:2013年1月1日
那么
如果更改此位,会发生什么情况:
from dbo.RPT_ENG_WEEK ('+@from+', '+@to+', '+@start+', '+@end+')
为此:
from dbo.RPT_ENG_WEEK ('''+@from+''', '''+@to+''', '''+@start+''', '''+@end+''')
每个位置有三个单引号
如果@from是一个日期时间
,您需要的格式是'd mmm yyyy'
,那么您可以在每个日期尝试以下方法:
CONVERT(VARCHAR, @from, 106)
所以整个事情的结局是这样的:
set @query = 'SELECT eng, ' + @colsNull + '
from
(
select eng, [count], cast(weekof as date) weekof
from dbo.RPT_ENG_WEEK (''' + CONVERT(VARCHAR, @from, 106) + ''', ''' + CONVERT(VARCHAR, @to, 106) + ''', ''' + CONVERT(VARCHAR, @start, 106) + ''')
) x
pivot
(
sum([count])
for weekof in (' + @cols + ')
) p '
从DBO.RPTSEngEngEng'('+@从+','+@ to +','+@ start +','+@结尾+')< /C>我认为,这个位<代码>中没有足够的单引号。“Dommer不是我在中间代码块中所放置的吗?我现在也尝试过从dBo.rpPTEngEng'(‘’+@从+’’’,‘’+@到+’’’,‘’+@ start + +’,’’’+@’+’+’’,但是没有喜悦!是的,我是说比特错了。我已经发布了一个答案,这应该会有帮助(我希望):-)你传递的日期是什么格式的?是不是2013年1月1日?那么`从dbo.RPT_ENG__WEEK(CONVERT(VARCHAR,(''+@from++'',106)`等等?太棒了-非常棒了!我忘记了一切都需要在一个字符串中才能工作!这可能是我最后一次进入动态SQL一段时间了。。。!
set @query = 'SELECT eng, ' + @colsNull + '
from
(
select eng, [count], cast(weekof as date) weekof
from dbo.RPT_ENG_WEEK (''' + CONVERT(VARCHAR, @from, 106) + ''', ''' + CONVERT(VARCHAR, @to, 106) + ''', ''' + CONVERT(VARCHAR, @start, 106) + ''')
) x
pivot
(
sum([count])
for weekof in (' + @cols + ')
) p '