日期:2014-05-18  浏览次数:20377 次

转换为数据类型为 int 的列时发生语法错误。
存储过程:
create proc Emporium_Insert
@E_Name nvarchar(100),
@E_address nvarchar(4000),
@E_explain nvarchar(4000),
@I_id int
as
/*
作用:插入商城信息
表名:Emporium
参数:@E_Name:商城名称,@E_address:商城地址,@E_explain:商城介绍,@I_id:联系人
时间:07.10.12
作者:Kmiaoer
*/

declare @StrSql nvarchar(4000)
if (@E_Name != '')
begin
set @StrSql = 'insert into Emporium (E_name,E_address,E_explain,I_id)values('''+@E_Name+''','''+@E_address+''','''+@E_explain+''','''+@I_id+''')'
print @StrSql
end 


执行语句:
exec Emporium_Insert @E_name = 卓达商城,@E_address=开发区上海路56,@E_explain=大型房地产公司,@I_id=1


错误:服务器: 消息 245,级别 16,状态 1,过程 Emporium_Insert,行 18
将 nvarchar 值 'insert into Emporium (E_name,E_address,E_explain,I_id)values('卓达商城','开发区上海路56','大型房地产公司','' 转换为数据类型为 int 的列时发生语法错误。


求大家帮忙...实在没办法了



------解决方案--------------------
declare @StrSql nvarchar(4000) 
if (@E_Name != ' ') 
begin 
set @StrSql = 'insert into Emporium (E_name,E_address,E_explain,I_id)values( ' ' '+@E_Name+ ' ' ', ' ' '+@E_address+ ' ' ', ' ' '+@E_explain+ ' ' ', ' ' '+@I_id+ ' ' ') ' 
print @StrSql 
end

更换为:

declare @StrSql nvarchar(4000) 
if (@E_Name != ' ') 
begin 
set @StrSql = 'insert into Emporium (E_name,E_address,E_explain,I_id)values( ' ' '+@E_Name+ ' ' ', ' ' '+@E_address+ ' ' ', ' ' '+@E_explain+ ' ' ', ' +@I_id+ ') ' 
print @StrSql 
end
------解决方案--------------------
set @I_id = isnull(@I_id,0)
------解决方案--------------------
错误显示 @I_id为空 先设置一下 如果为空就等于0
------解决方案--------------------




create proc Emporium_Insert 
@E_Name nvarchar(100), 
@E_address nvarchar(4000), 
@E_explain nvarchar(4000), 
@I_id int 
as 
/* 
作用:插入商城信息 
表名:Emporium 
参数:@E_Name:商城名称,@E_address:商城地址,@E_explain:商城介绍,@I_id:联系人 
时间:07.10.12 
作者:Kmiaoer 
*/ 


SQL code

IF (@I_id='')
BEGIN
SET @Name = 0
END

------解决方案--------------------
上边中间部分的


IF (@I_id='')
BEGIN
SET @I_id = 0
END


有点错误
------解决方案--------------------
错误提示是列类型不匹配!你只有三列是nvarchar的!数据库里面也是这个类型吗??
------解决方案--------------------
@I_id换成convert(varchar(10),@I_id)
------解决方案--------------------
学习哈