这正确执行:(这是奇怪的,我需要的日期用'它实际上执行)SQL Server查询日期发行
DECLARE
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.statcolumnname) FROM [85137_PHY_Long_PG] c FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT statdate, ' + @cols + ' from
(
select statdate, statcolumnname, statcolumnvalue
from [85137_PHY_Long_PG]
) x
pivot
(
min(statcolumnvalue)
for statcolumnname in (' + @cols + ')
) p WHERE statdate BETWEEN ''2012-04-01 12:15:00'' AND ''2012-04-01 12:45:00'' ORDER BY statdate'
execute(@query)
现在我想用变量替换日期:
DECLARE
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@from AS NVARCHAR(MAX),
@to AS NVARCHAR(MAX);
set @from = '2012-04-01 12:15:00'
set @to = '2012-04-01 12:45:00'
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.statcolumnname) FROM [85137_PHY_Long_PG] c FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT statdate, ' + @cols + ' from
(
select statdate, statcolumnname, statcolumnvalue
from [85137_PHY_Long_PG]
) x
pivot
(
min(statcolumnvalue)
for statcolumnname in (' + @cols + ')
) p WHERE statdate BETWEEN ''[email protected]+'' AND ''[email protected]+'' ORDER BY statdate'
execute(@query)
我得到以下错误:转换把字符串时SMALLDATETIME数据类型
更改失败where语句到t他以下几点:
WHERE statdate BETWEEN ''+convert(smalldatetime,@from)+'' AND ''+convert(smalldatetime,@to)+'' ORDER BY statdate'
仍然给我相同的错误,似乎就是无法更换日期作为变量
你错过了一组撇号。 – Arvo
我已经尝试过多种方法无济于事,sp_executesql似乎工作得很好 – Thomas