数据类型nvarchar和nvarchar在减法运算符

时间:2016-10-05 07:28:20

标签: sql-server tsql runtime-error data-conversion nvarchar

我知道之前有人问过。我研究过以前的答案,但找不到解决我问题的方法。在我的案例中最令人好奇的是,完全相同的代码在测试数据库上工作,但在生产中却没有,尽管它们完全相同。程序本身很长,但我设法隔离了有问题的部分。我希望有人能看到我不喜欢的东西,因为我在这上面已经失去了2天但仍然不知道:

DECLARE luUpdateCursor CURSOR  FORWARD_ONLY STATIC READ_ONLY FOR
    SELECT Id, DisplayFormat, LookupName FROM #ProductResults WHERE Value IS NOT NULL AND LEN(LTRIM(RTRIM(LookupName))) > 0

OPEN luUpdateCursor

FETCH NEXT FROM luUpdateCursor
INTO @Id, @DisplayFormat, @LookUpName
WHILE @@FETCH_STATUS = 0
BEGIN
   IF @LocaleID = @SystemLocaleId
        BEGIN
            SET @strSql = '
                UPDATE PR
                    SET PR.Value = ' + REPLACE(REPLACE(@DisplayFormat,'[','lk.['),',' , '+ '','' + ')  + '          
            FROM
                #ProductResults PR 
            INNER JOIN
                tblk_' + RTRIM(@LookUpName) + ' lk WITH(NOLOCK) ON PR.Value = lk.Id 
            WHERE
                PR.Id = ' + CONVERT(NVARCHAR,@Id)
    END
ELSE
    BEGIN
        SET @strSql = '
            UPDATE PR
                SET PR.Value = COALESCE(' + REPLACE(REPLACE(@DisplayFormat,'[','lkl.['),',' , '+ '','' + ') + ',' + REPLACE(REPLACE(@DisplayFormat,'[','lk.['),',' , '+ 
'','' + ')  + ')            
            FROM
                #ProductResults PR 
            INNER JOIN
                tblk_' + RTRIM(@LookUpName) + ' lk WITH(NOLOCK) ON PR.Value = lk.Id 
            LEFT OUTER JOIN
                tblk_' + RTRIM(@LookUpName) + '_Locale lkl WITH(NOLOCK) ON PR.Value = lkl.fk_Id AND lkl.FK_Locale = ' + CAST(@LocaleID AS NVARCHAR(20)) + ' 
            WHERE
                PR.Id = ' + CONVERT(NVARCHAR,@Id)
    END 
    EXECUTE sp_executesql @strSql;
    FETCH NEXT FROM luUpdateCursor
    INTO @Id, @DisplayFormat, @LookUpName
END
CLOSE luUpdateCursor
DEALLOCATE luUpdateCursor;

表#ProductREsults具有Id INT,而DisplayFormat和LookupNAme都是NVarchar。在程序中也有一个非常相似的查询,实际上相同但在不同的表上,并且一个工作,所以这困扰我这么多。 对不起,如果问题很愚蠢。

1 个答案:

答案 0 :(得分:0)

此错误"数据类型nvarchar(max)和nvarchar(max)在减法运算符中不兼容。"将数据类型为nvarchar的两个变量或列减去时抛出。 查找执行子结构运算符的其他查询或可能发生隐含的位置。