更新记录 - 数据类型nvarchar和文本在等于运算符中不兼容

时间:2018-01-30 18:26:23

标签: sql vba excel-vba excel

我正在尝试使用vba

更新sql server中的记录
'Required Query
    myQuery = "UPDATE dbo.RecertFormatterDataTable  SET [TaskStatus]  = ? WHERE [TaskName] = ? AND [Report Name] = ?"

    Dim CurrStatus As String
    Dim TaskNames As String
    Dim ReportPath As String



    'set up parameters
        Set myParameters = New Collection
        myParameters.Add TaskNames
        myParameters.Add CurrStatus
        myParameters.Add ReportPath
        queryType = "Push"


        Set rs = myDB.Query(myQuery, queryType, myParameters)

我有一个将String转换为advarchar

的类模块

但是我无法在这里加载值 -

  

数据类型nvarchar和文本在in等于中是无法比较的   操作

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

复制/粘贴部分对我来说并不清楚,但我可以说这种错误主要是因为在分配字符串值之前和之后忘记了撇号(')符号。

示例:

错误 - > query = ("update myTable set Name = {0} where Id = 10", "Jonathan");

TRUE - > query = ("update myTable set Name = ' + "Jonathan" + ' where Id = 10";

之前,我认为在为myQuery分配值时出现问题。尝试类似的东西:

myQuery = "UPDATE dbo.RecertFormatterDataTable SET [TaskStatus] = '?' WHERE [TaskName] = '?' AND [Report Name] = '?'"

如果上述方法无效,请尝试:

解决方案1:将?s的数据类型更改为nvarchar。

myQuery = "UPDATE dbo.RecertFormatterDataTable SET [TaskStatus] = CONVERT(NVARCHAR(MAX), ?) WHERE [TaskName] = CONVERT(NVARCHAR(MAX), ?) AND [Report Name] = CONVERT(NVARCHAR(MAX), ?)"

解决方案2:将列的数据类型转换为nvarchar(max)并重新运行更新查询。示例:

ALTER TABLE RecertFormatterDataTable
ALTER COLUMN TaskStatus NVARCHAR(MAX)
GO

参考:https://blog.sqlauthority.com/2012/12/04/sql-server-fix-error-402-the-data-types-ntext-and-varchar-are-incompatible-in-the-equal-to-operator/