将varchar转换为int,SQL Server

时间:2011-11-08 08:36:49

标签: 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
      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.

3 个答案:

答案 0 :(得分:1)

你使用了错误的语法

应该是

CONVERT(expr,type)

类型必须为SIGNED [INTEGER]

REFERENCE

答案 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目前不包含非整数值,它仍然是文本列! 有人可以随时插入一个非整数值,所以我总是确保我的查询在这种情况下也能正常工作。