我有这个存储过程
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。
任何人都可以解释我做错了什么吗?
答案 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 + ''';'