Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从字符串动态sql转换日期和/或时间时,转换失败_Sql_Sql Server 2008_Dynamic - Fatal编程技术网

从字符串动态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'', '

我运行了一点动态SQL,当我手动写入变量时,它运行得很好,但是当我将它们从手动写入的变量更改为实际变量时,就会出现上面的错误

代码是:

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 '