我有一个很大的过程,主要包括动态SQL。我在设置其中一个日期字段时遇到问题。
DECLARE @WorkDate DATETIME
SET @WorkDate = 'SELECT MIN(__Insert_Date) FROM ' + @DatabaseName + '.'
+ @SchemaName + '.' + @TableName + '_Hist'
SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')
这是一个重要程序的一部分。因此,当我执行上述查询时,我收到此错误:
Msg 241,Level 16,State 1,Line 68
从字符串转换日期和/或时间时转换失败。
答案 0 :(得分:0)
看起来此数据库中的日期字段未存储为DateTime
值。
答案 1 :(得分:0)
而不是19000101
,请使用1900-01-01
。它无法识别您的字符串的日期格式,或者您的@WorkDate
值无效。
答案 2 :(得分:0)
@WorkDate是DATETIME,你把它设置为sting,这就是转换失败的原因 编辑:
试试这个:
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
插入__Insert_Date
所在的选择字符串中,那么您需要将订单反转为看起来像这样
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
插入到选择字符串中,但这就是您可以实现的目标