【问题标题】:How to fix 'The data types datetime and uniqueidentifier are incompatible in the add operator.'如何修复“添加运算符中的数据类型 datetime 和 uniqueidentifier 不兼容。”
【发布时间】:2020-03-02 09:24:21
【问题描述】:
DECLARE @caseId UNIQUEIDENTIFIER,
    @fieldId UNIQUEIDENTIFIER,
    @columnName NVARCHAR(MAX),
    @dateValue DATETIME,
    @tableName nvarchar(MAX);

set @command = 'update ' + @tableName + ' set ' + @columnName + ' = ' + @dateValue + ' where Id = ''' + @caseId + '''';
exec sp_executesql @command;

运行更新命令时出错。 - 数据类型 datetime 和 uniqueidentifier 在 add 运算符中不兼容。 有人可以帮忙吗?

【问题讨论】:

  • 我们能看到你的表的定义和你插入变量的值吗?
  • 您正在使用 datetime 更新 nvarchar 列,尝试使用 nvarchar 转换 datetime 变量

标签: c# sql .net sql-server database


【解决方案1】:

我认为您应该对日期和 id 值使用查询参数,而不是在查询字符串中混杂它们。

看起来像:

declare 
    @pCaseId UNIQUEIDENTIFIER,
    @pFieldId UNIQUEIDENTIFIER,
    @pColumnName NVARCHAR(MAX),
    @pDateValue DATETIME,
    @pTableName nvarchar(MAX);

set @command = 'update ' + @pTableName + ' set ' + @pColumnName + ' = @dateValue where Id = @caseId';
exec sp_executesql 
    @command,
    N'@dateValue DATETIME, @caseId UNIQUEIDENTIFIER',
    @pDateValue, 
    @pCaseId
;

【讨论】:

    【解决方案2】:

    试试这个:

    DECLARE @caseId UNIQUEIDENTIFIER,
        @fieldId UNIQUEIDENTIFIER,
        @columnName NVARCHAR(MAX),
        @dateValue DATETIME,
        @tableName nvarchar(MAX);
    
    set @command = 'update ' + @tableName + ' set ' + @columnName + ' = ' +convert(nvarchar(100),@dateValue,120) + ' where Id = ''' + @caseId + '''';
    exec sp_executesql @command;
    

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多