Sql 更新命令上的日期转换错误

Sql 更新命令上的日期转换错误,sql,sql-update,Sql,Sql Update,我有一个存储过程在更新命令上抛出一个错误,下面是相关的代码行 DECLARE @submitDate1 DATETIME; SET @submitDate1 = GETDATE() SET @sql = 'UPDATE ' + @currTable + ' SET [lang_String] = ''' + @lang_String + ''', [date_Changed] = ''' + @submitDate1 + ''', [prev_LangString] = ''' + @

我有一个存储过程在更新命令上抛出一个错误,下面是相关的代码行

DECLARE @submitDate1 DATETIME;
SET @submitDate1 = GETDATE()

   SET @sql = 'UPDATE ' + @currTable + ' SET [lang_String] = ''' + @lang_String + ''', [date_Changed] = ''' +  @submitDate1 + ''', [prev_LangString] = ''' + @prev_LangString + ''', [needsTranslation] = ''' + @needsTranslation + ''' WHERE [ID] = ' + CAST(@ID as nvarchar(10)) + '; '
   EXEC(@sql)
这里是错误。。。
从字符串转换日期和/或时间时,转换失败

在将日期连接到其他字符串之前,必须将其转换为字符串:

... = ''' +  convert(varchar(20), @submitDate1) + ''', [...

在将日期连接到其他字符串之前,必须将其转换为字符串:

... = ''' +  convert(varchar(20), @submitDate1) + ''', [...
使用

在您使用@submitDate1变量的地方

SQL不执行从日期到字符串的隐式转换

使用

在您使用@submitDate1变量的地方


SQL不执行从日期到字符串的隐式转换

我很好奇,为什么在目标表中将字段定义为DATETIME。@marc11h:因为您正在创建一个字符串。在将字符串用作查询之前,它与表没有任何关系。@Marc11h您正在构建一个动态varchar。如果不转换或强制转换datetime,就不能将varchar与datetime连接起来谢谢,我的想法是DECLARE语句定义了类型。键入变量时没有varchar。很难理解这种ilogical命名,因为@sql可能是一个VARCHAR。如果您想将日期存储在@sql字符串中,则需要将其存储为字符串。。。您后来执行它,以便将DATETIME值放入DATETIME字段,这与首先创建@sql字符串无关。不过,我很好奇,为什么在目标表中将该字段定义为DATETIME。@marc11h:因为您正在创建字符串。在将字符串用作查询之前,它与表没有任何关系。@Marc11h您正在构建一个动态varchar。如果不转换或强制转换datetime,就不能将varchar与datetime连接起来谢谢,我的想法是DECLARE语句定义了类型。键入变量时没有varchar。很难理解这种ilogical命名,因为@sql可能是一个VARCHAR。如果您想将日期存储在@sql字符串中,则需要将其存储为字符串。。。您稍后执行它,以便将DATETIME值放入DATETIME字段,这与首先创建@sql字符串无关;删除表用户;我希望没有人在@lang_字符串中填入'WHERE 1=0;删除表用户;