我的桌子在下面
CREATE TABLE Customers
(
CustomerID int identity(1,1) not null primary key,
Name varchar(50) not null,
PhoneNumber varchar(20) not null
constraint chk_PhoneNumber check(PhoneNumber not like '%[^0-9]%'),
DoorNo varchar(50) not null,
StreetName varchar(50) not null,
City varchar(50) not null,
Statee varchar(50) not null,
Zipcode int not null
)
我的存储过程:
ALTER PROCEDURE stp_customers_insert
(@customerid int,
@name varchar(50),
@phone varchar(50),
@doorno varchar(50),
@streetname varchar(50),
@city varchar(50),
@state varchar(50),
@zip int)
AS
BEGIN
IF EXISTS (SELECT CustomerID FROM Customers WHERE CustomerID = @customerid)
BEGIN
RAISERROR ('employee id already exists', 1, 1)
END
ELSE
BEGIN
INSERT INTO Customers (Name, PhoneNumber, DoorNo, StreetName, City, Statee, Zipcode)
VALUES (@name, @phone, @doorno, @streetname, @city, @state, @zip)
END
END
示例电话:
exec stp_customers_insert 'ram', '674673932', '122', '5th cross', 'trichy', 'tamilnadu', 620001
我收到此错误:
Msg 8114,Level 16,State 5,Procedure stp_customers_insert,Line 23
将数据类型varchar转换为int时出错。
答案 0 :(得分:1)
问题似乎是您的存储过程需要8个参数:
stp_customers_insert(@customerid int, @name varchar(50), @phone varchar(50),
@doorno varchar(50), @streetname varchar(50), @city varchar(50),
@state varchar(50), @zip int)
但实际调用proc时只传递7个参数:
exec stp_customers_insert 'ram','674673932','122','5th cross','trichy','tamilnadu',620001
如果您不知道或不想对CustomerID
执行重复检查,那么您可以略微修改您的通话,只需通过NULL
:
exec stp_customers_insert NULL, 'ram','674673932','122','5th cross','trichy','tamilnadu',620001
顺便说一句,如果proc甚至没有插入CustomerID
,并且这个字段是自动递增的,那么我没有看到传递它的意义。相反,您可能需要考虑使用唯一约束来实现相同的目标。
答案 1 :(得分:1)
exec stp_customers_insert 1,'ram','674673932','122','5thcross','trichy','tamilnadu',620001
您必须在过程参数中传递@customerid
值 - 然后它将无错执行。
答案 2 :(得分:-1)
在您的表格结构CustomerID
中定义为INT
。但是,因为您的存储过程是以这种格式定义的:
stp_customers_insert(@customerid int,@name ....
您要将ram
作为customerid
的值发送到
exec stp_customers_insert 'ram','674673932'....
将此更正为:
exec stp_customers_insert '*enter the CustId value here*','ram','674673932'....
将*enter the CustId value here*
替换为CustomerID
同样改变:
insert into Customers(Name,PhoneNumber,DoorNo,StreetName,City,Statee,Zipcode) values(@name,@phone,@doorno,@streetname,@city,@state,@zip)
将CustomerID
包括为:
insert into Customers(CustomerID,Name,PhoneNumber,DoorNo,StreetName,City,Statee,Zipcode) values(@customerid,@name,@phone,@doorno,@streetname,@city,@state,@zip)
答案 3 :(得分:-1)
我建议从sp @customerid
删除CustomerID
是自动增量字段,因此无需为CustomerID
传递任何值。它应该是这样的:
alter procedure stp_customers_insert(@name varchar(50),@phone varchar(50),@doorno varchar(50),@streetname varchar(50),@city varchar(50),@state varchar(50),@zip int)
as
begin
if exists(select CustomerID from Customers where Name = @name ,phone = @phone ,doorno = @doorno ,streetname = @streetname ,city= @city,state= @state , zip = @zip )
begin
raiserror('employee id already exists',1,1)
end
else
begin
insert into Customers(Name,PhoneNumber,DoorNo,StreetName,City,Statee,Zipcode) values(@name,@phone,@doorno,@streetname,@city,@state,@zip)
end
end
exec stp_customers_insert 'ram','674673932','122','5th cross','trichy','tamilnadu',620001