Sql server 将varchar转换为int,SQL Server
我有这样的代码:Sql server 将varchar转换为int,SQL Server,sql-server,date,Sql Server,Date,我有这样的代码: 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
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.
您使用了错误的语法 应该是
CONVERT(expr,type)
和类型必须是有符号的
MySQL?SQL Server?哪一个 什么类型的id_barang stok适用于餐桌上的barang 猜测问题表达式为id_barang=@id SQL Server convert()函数不允许将文本转换为int(INT4) 问题出在id_barang=@id上。
id_barang包含一个RDBMS无法转换为整数的值
id\u barang
是一个varchar。因此,如果无法将
id\u barang
转换为整数,则必须在查询中将@id
转换为varchar:
SELECT @tahu = CONVERT(INT, stok)
FROM barang
WHERE id_barang = CONVERT(varchar(50), @id);
我使用的是varchar(50)
,因为我不知道id_barang到底是什么类型的varchar
我建议总是这样做。即使
id\u barang
目前不包含非整数值……它仍然是一个文本列有人可以随时插入非整数值,因此我会始终确保我的查询在这种情况下也能正常工作。转换函数工作正常,问题在于id_barang=@id。id_barang包含RDBMS无法转换为整数的值。
id_barang
的数据类型是什么?它是文本吗?如果是,为什么?这不是正确答案。OP位于SQL Server上,它们使用的语法位于SQL Server上。他们收到的错误消息表明,他们正在对text
数据类型的一列和varchar
标记中的一列进行相等比较,即mysql
,这就是为什么我建议这样做的原因错误消息肯定是SQL Server。我换了标签,和整数无关。OP得到的错误消息仅仅是因为列是text
数据类型,并且禁止对varchar
使用=
,而不首先将text
列强制转换为varchar
。