我有这样的代码:
CREATE FUNCTION gantistok (@id VARCHAR(8),
@id_t INT)
RETURNS INT
BEGIN
DECLARE @tahu INT,
@tempe INT,
@hasil INT;
SELECT @tahu = CONVERT(INT, stok)
FROM barang
WHERE id_barang = @id;
SELECT @tempe = CONVERT(INT, jumlah)
FROM det_trans
WHERE id_det_trans = @id_t;
SET @hasil = @tahu - @tempe;
RETURN @hasil
END
为什么不起作用?我收到了这个错误:
Msg 402, Level 16, State 1, Procedure gantistok, Line 5
The data types text and varchar are incompatible in the equal to operator.
答案 0 :(得分:1)
答案 1 :(得分:1)
的MySQL? SQL Server?哪一个?
表barang的id_barang stok是什么类型的?
猜测问题表达式是id_barang = @ id
SQL Server convert()函数不允许将TEXT转换为int(INT4)。
答案 2 :(得分:0)
问题在于id_barang = @id id_barang包含一个RDBMS无法转换为整数的值。
id_barang
是varchar
因此,如果您无法将id_barang
转换为整数,则必须在查询中将@id
转换为varchar:
SELECT @tahu = CONVERT(INT, stok)
FROM barang
WHERE id_barang = CONVERT(varchar(50), @id);
我正在使用varchar(50)
因为我不知道id_barang究竟是什么类型的varchar。
我建议始终这样做。
即使id_barang
目前不包含非整数值,它仍然是文本列!
有人可以随时插入一个非整数值,所以我总是确保我的查询在这种情况下也能正常工作。