0

我有一个主要由动态 SQL 组成的大程序。我在设置日期字段之一时遇到问题。

DECLARE @WorkDate DATETIME 

SET @WorkDate = 'SELECT MIN(__Insert_Date) FROM  ' + @DatabaseName + '.'
                            + @SchemaName + '.' + @TableName + '_Hist'

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

这是一个大程序的一部分。因此,当我执行上述查询时,我收到此错误:

消息 241,级别 16,状态 1,第 68 行
从字符串转换日期和/或时间时转换失败。

4

3 回答 3

0

看起来此数据库中的日期字段未存储为DateTime值。

于 2012-08-08T15:39:38.267 回答
0

而不是19000101,使用1900-01-01. 它无法识别您的字符串的日期格式,或者您的@WorkDate值无效。

于 2012-08-08T15:39:40.090 回答
0

@WorkDate 是 DATETIME 并且您将其设置为一个刺痛,这就是转换失败的原因编辑:

试试这个:

DECLARE @WorkDate DATETIME, @WorkDateString varchar(100)

SET @WorkDateString = 'SELECT MIN(__Insert_Date) FROM  ' + @DatabaseName + '.'
                        + @SchemaName + '.' + @TableName + '_Hist'

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

如果您需要将 插入@WorkDate选择字符串 where __Insert_Dateis 那么您需要颠倒顺序看起来像这样

DECLARE @WorkDate DATETIME, @WorkDateString varchar(100)

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

SET @WorkDateString = 'SELECT MIN(' + CAST(@WorkDate as varchar(19)) + ') FROM  ' + @DatabaseName + '.'
                        + @SchemaName + '.' + @TableName + '_Hist'

不知道您是否希望将 插入@WorkDate到选择字符串中,但这就是您可以完成的方法

于 2012-08-08T15:44:45.373 回答