我想在运算符中使用变量。我试过用数组,但做不到。所以我试着用这个方法:
Do BEGIN
var = SELECT ELEMENT_NAME FROM TABLE_NAME WHERE ELEMENT_NAME IN ('1', '2', '3');
UPDATE TABLE_NAME
SET DATE_DATA = ADD_MONTHS( DATE_DATA, 1 )
WHERE ELEMENT IN (:var);
END
但它删除了错误:“不一致的数据类型:表类型与nvarchar不可比较”。
但如果我用这个,没有变量,但查询相同:
Do BEGIN
UPDATE TABLE_NAME
SET DATE_DATA = ADD_MONTHS( DATE_DATA, 1 )
WHERE ELEMENT IN (SELECT ELEMENT_NAME FROM TABLE_NAME WHERE ELEMENT_NAME IN ('1', '2', '3'));
END
太完美了。为什么运行这个而第一个不运行?如何用变量来解决这个问题?
2条答案
按热度按时间46qrfjad1#
您将标量值的比较与表数据类型混为一谈。
表类型变量只存在于sqlscript中,sqlscript编译器不理解/不支持表类型变量的自动转换
:var
将表类型化变量放入适当的子查询中。这根本不是表变量的作用。通过执行前面所述的操作,即使用子选择,可以轻松解决此问题:
nhaq1z212#
是的,你可以。只是做不到你想要的。相当于
=
. 即使值包含以下字符,
或者''
; 这些只是字符串中的字符。如果没有方便的字符串拆分器功能,则始终可以使用字符串操作: