日期:2014-05-17  浏览次数:20481 次

SQL Server存储过程出错
用的存储过程是
alter PROCEDURE [dbo].[ImprotToEmployee]  
 @username varchar(50),  
 @deptname varchar(50),  
 @teamname varchar(50),  
 @cardno bigint,  
 @corpid int
AS
declare @deptId int 
declare @teamId int 
set @deptId=-1  
set @teamId=-1
set @deptId=(SELECT top 1 [deptId] FROM [ABDoor].[dbo].[Department] 
where [orgId]=@corpid and [deptName]=@deptname and [isValid]='true')
set @deptname = (SELECT top 1 [deptName] FROM [ABDoor].[dbo].[Department] where deptId = @deptId )
--print @deptId
if @deptId=-1
begin
insert into Department (orgId, deptName, isValid) values (@corpid,@deptname,1 )
SELECT @deptId = @@IDENTITY
end 
set @teamId=(select officeId from Office where deptId = @deptId and officeName =@teamname and isValid = 'True')
if @teamId=-1
begin 
insert into Office (deptId, officeName, isValid) values(@deptId,@teamname,1 )
SELECT @teamId = @@IDENTITY
end
insert into Employee([name], officeId, cardNumber) values (@username,@teamId,@cardno)
不过调用时 -- [ImprotToEmployee] 'abc','测试部门','123',1,197
提示消息 515,级别 16,状态 2,过程 ImprotToEmployee,第 33 行
不能将值 NULL 插入列 'officeId',表 'ABDoor.dbo.Employee';列不允许有空值。INSERT 失败。
语句已终止。
我因为给的值@deptname,@teamname有值,而@deptId,@teamId没有值

------解决方案--------------------
如果你业务上的'ABDoor.dbo.Employee'表中officeid允许为空,那么表结构那里就设为【允许为null】,你目前的表是不能为null的,如果业务不允许,那么你就付个默认值就可以了