0

Incorrect syntax near '11'.我在 SQL Server 中得到错误。

有一个存储过程SP_TEST

...
@ALISTARIHI datetime
...
AS
BEGIN
...
exec('CONVERT(DATETIME,'+@ALISTARIHI+')')

调用 SP_TEST:

exec SP_TEST '08.11.2013'

正如我上面提到的,我得到错误

'11' 附近的语法不正确

当我打电话时。我该如何解决?

注意:上面的一些代码看起来

4

2 回答 2

5

很多事情都错了。

  1. 关于将日期时间转换为日期时间的评论很到位。你为什么做这个?为什么您的日期时间格式不明确?我完全不知道那应该是 8 月 11 日还是 11 月 8 日。尝试使用yyyymmdd.

  2. 假设您确实需要这样做,为什么要在动态 SQL 中这样做?

  3. 假设您确实需要动态 SQL,为什么您的语句不完整?即使您在值周围放置字符串分隔符,这会做什么?

    CONVERT(DATETIME, '20131108');
    

    哦,对了:

    消息 156,级别 15,状态 1
    关键字“CONVERT”附近的语法不正确。

    声明甚至不完整。所以也许你的意思是:

    EXEC('SELECT CONVERT(DATETIME,'''+@ALISTARIHI+''')')
    

但实际上,您可能想要这样的东西

DECLARE @sql NVARCHAR(MAX) = N'SELECT CONVERT(DATETIME, @d);';
EXEC sp_executesql @sql, N'@d DATETIME', @ALISTARIHI;

但我仍然不明白您为什么要将日期时间转换为日期时间。

PS 为什么你要把你的变量命名为这么长且难以输入的东西?

于 2013-11-08T15:30:33.107 回答
0

问题是您08.11.2013作为参数传递,在 EXEC 中连接后您将收到CONVERT(DATETIME,08.11.2013),即您将没有字符串 - 这是错误的原因。肯定是CONVERT(DATETIME,'08.11.2013')

该命令exec('CONVERT(DATETIME,'+@ALISTARIHI+')')对我来说也没有任何意义。这是错误的。必须是exec('SELECT CONVERT(DATETIME,'''+@ALISTARIHI+''')')。并且结果将超出当前代码的范围(因为 EXEC)。

于 2013-11-08T15:30:25.650 回答