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

Cannot convert varchar value to int in stored procedure in SQL Server

我有这个存储过程

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# 传递到存储过程时,它就会抛出错误。

Conversion failed when converting the varchar value 'select id from PRACTICE_DETAIL where Practice_Name_Description = Bankson PT- Daniel (DBA);' to data type int.

谁能解释一下我做错了什么?

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

您必须 return 一个 int 值或将 @prctid 设为 varchar 类型以确保您获得正确的值。

希望对您有所帮助。

试试这个

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

试试这个

DECLARE @prctid as varchar(max)

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

缺少单引号。 试试这个。

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

您必须在 select 语句中将 selected 值设置为整型变量。

使用以下代码:-

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

正如 Jarvis 在他的回答中所说,您需要将 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

没有引号。

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

我做了这样的改变

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