无法在SQL Server的存储过程中将varchar值转换为int

时间:2015-04-23 06:01:58

标签: c# sql sql-server stored-procedures

我有这个存储过程

create procedure [dbo].[CreateNewTicket]
    (@Practice_Id as varchar(40),
    )
  /* insert some rows into TICKET table */
As Begin
   DECLARE @prctid as int

   SELECT @prctid = 'select id from PRACTICE_DETAIL where Practice_Name_Description = ' + @Practice_Id + ';'
 end 
 GO

但每当我将值从C#传递给存储过程时,它就会抛出错误。

  

转换varchar值'select id from时转换失败   PRACTICE_DETAIL,其中Practice_Name_Description = Bankson PT- Daniel   (DBA);”数据类型int。

任何人都可以解释我做错了什么吗?

7 个答案:

答案 0 :(得分:2)

您必须在select语句中将所选值设置为整数变量。

使用以下代码: -

SELECT @prctid = id from PRACTICE_DETAIL where Practice_Name_Description = @Practice_Id

答案 1 :(得分:1)

试试这个

create procedure [dbo].[CreateNewTicket]
(
 @Practice_Id as varchar(40),
)
/* insert some rows into TICKET table */

As Begin
DECLARE @prctid as int
SELECT @prctid = id from PRACTICE_DETAIL where Practice_Name_Description = @Practice_Id;
end 
GO

答案 2 :(得分:1)

正如贾维斯在回答中所说,你需要为变量INT分配一个@prctid。在您的对帐单发布后,由于单引号,您尝试分配VARCHAR

'select id from PRACTICE_DETAIL where Practice_Name_Description = ' + @Practice_Id + ';'

这将导致VARCHAR,因此出现错误。

您正在寻找的是:

SELECT @prctid = select id from PRACTICE_DETAIL where Practice_Name_Description = @Practice_Id

没有引号。

答案 3 :(得分:0)

id字段必须为varchar类型。这就是您收到此错误的原因。

您必须返回int值或将@prctid设为varchar类型,以确保获得正确的值。

希望这有帮助。

答案 4 :(得分:0)

谢谢大家。它的工作就像一个魅力..

我做了类似

的更改
  DECLARE @prctid as int
  SELECT @prctid = id from PRACTICE_DETAIL where Practice_Name_Description = @Practice_Id

答案 5 :(得分:-1)

试试这个

DECLARE @prctid as varchar(max)

SELECT @prctid = "select id from PRACTICE_DETAIL where Practice_Name_Description =  '" + @Practice_Id + "';"

答案 6 :(得分:-1)

缺少单引号。 试试这个。

SELECT @prctid = 'select id from PRACTICE_DETAIL where Practice_Name_Description = ''' + @Practice_Id + ''';'