这个SQL有什么问题?

时间:2009-11-17 19:22:02

标签: sql sql-server tsql

SQL是:

execute ('delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(max), 0) + '''')

错误是

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'convert'.

注释掉转换部分会删除错误。怎么了?

5 个答案:

答案 0 :(得分:12)

将“执行”替换为“打印”,删除括号,然后运行,即可获得

delete from HttpRequests where Date < '2009-08-0'

这不是一个有效的日期。

答案 1 :(得分:3)

EXECUTE (@stringvariable)不允许连接比@stringvariable1 + @stringvariable2

更复杂

你必须这样做:

DECLARE @sql nvarchar(4000)
SELECT @sql = 'delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(4000), 0) + '''
EXECUTE (@sql)

然而,你有无效的日期错误......我也修复了引用错误......

答案 2 :(得分:2)

声明没有错。 SQL根本不允许将CONVERT表达式的结果传递给EXEC。我找不到任何相关文档,但很多人都报告了这种行为。

http://www.eggheadcafe.com/software/aspnet/34917755/pass-result-of-convert-as.aspx

答案 3 :(得分:1)

您似乎没有创建有效日期。

select 'delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(max), 0) 

+''''

会给你:从HttpRequests中删除Date&lt; '2009-08-0'

答案 4 :(得分:-2)

查询日期,例如yyyyMMdd,并将最大值放在[]。

之间