【发布时间】:2015-07-16 05:27:41
【问题描述】:
我已经写了这个存储过程
ALTER PROCEDURE [dbo].[SP_InsertUpdate_Customer]
(
@cfname varchar(200),
@clname varchar(200),
@address1 varchar(200),
@address2 varchar(200),
@city varchar(200),
@pincode varchar(50),
@mobileno varchar(20),
@brno int,
@birthdate datetime,
@age int,
@gender char,
@email varchar(50),
@bal float,
@acctype varchar(200),
@opendate date,
@flag int,
@vchrMsg varchar(200) output
)
AS
BEGIN
begin transaction t1
begin try
declare @dt varchar(200)
declare @no varchar(200)
declare @cust_id varchar(200)
declare @accno varchar(200)
set @dt= (CONVERT(VARCHAR(24), GETDATE(), 126))
if(@flag=1)
BEGIN
SET @dt= CONVERT(VARCHAR(200), GETDATE(), 126);
exec @dt= dbo.RemoveNonAlphaCharacters @dt;
select @cust_id = CONCAT((LEFT(@cfname,1)),(LEFT(@clname,1)))
SET @no= CONCAT(@cust_id,@dt);
SELECT CAST(@brno as varchar(200))
SET @accno='123'
insert into tbl_customer(cust_id, cust_fname, cust_lname, cust_bdate, cust_age, cust_address1, cust_address2, cust_city, cust_zipcode, cust_gen, cust_contactno, cust_brno, cust_accno, cust_balance, cust_acctype, cust_opendate, IsActive)
values(@no, @cfname, @clname, @birthdate, @age, @address1, @address2, @city, @pincode, @gender, @mobileno, @brno, @accno, @bal, @acctype, @opendate, 'Y')
set @vchrMsg=@cust_id----successfully inserted
END
end try
begin catch
set @vchrMsg=ERROR_MESSAGE()
PRINT @vchrMsg
rollback transaction t1
return
end catch
commit transaction t1
END
select Msg = @vchrMsg;
return @vchrMsg;
Print @vchrMsg
现在当我试图执行这条语句时:
exec SP_InsertUpdate_Customer 'Anup'
,'Patil'
,'demo'
,'demo'
,'demo'
,'07029'
,'000000000'
,123
,'03/02/1989'
,25
,'M'
,'anuppatil007@gmail.com'
,200
,'demo'
,'07/16/2015'
,1,''
我收到此错误:
消息 245,级别 16,状态 1,过程 SP_InsertUpdate_Customer,第 90 行
将 varchar 值“AP”转换为数据时转换失败 输入整数。
请帮我整理一下..
【问题讨论】:
-
“AP”值存储在哪一列?
-
dbo.RemoveNonAlphaCharacters 检查这个存储过程或函数
-
提供
dbo.RemoveNonAlphaCharacters的代码 -
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
存储过程的返回值只能为
INT- 通常用于指示受存储过程影响的行数,或指示错误情况。您不能使用RETURN从存储过程返回varchar消息 - 您需要改用OUTPUT参数或SELECT结果集
标签: sql sql-server-2012