Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将varchar转换为int,SQL Server_Sql Server_Date - Fatal编程技术网

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