在sql中获取错误

时间:2011-11-15 15:11:56

标签: sql sql-server

我收到此错误:

  

过程或函数'NewEmployee'需要参数'@LastName',这是未提供的

这就是我所拥有的:

    CREATE PROCEDURE NewEmployee1 (
     @LastName nvarchar(75)
     ,@FirstName nvarchar(50)
     ,@HireDate datetime
     ,@Birthdate datetime
     ,@Title nvarchar(30))
WITH EXECUTE AS CALLER
AS
BEGIN

Set NOCOUNT ON;
Begin Try
    Begin Transaction;
    INSERT INTO Employees (LastName,FirstName,HireDate,BirthDate,Title)
    VALUES (@LastName, @FirstName, @HireDate,@Birthdate,@Title)

COMMIT TRANSACTION;

End Try
Begin Catch
--Rollback any active or uncommitable transactions before
--inserting information in the errorLog
If @@Trancount > 0
Begin
Rollback Transaction;
End
Execute NewEmployee1 ;
End Catch;
End;

Exec NewEmployee
 @LastName = 'Halpert',
 @FirstName = 'Jim',
 @HireDate = '11/14/2011',
 @BirthDate = '04/02/1971',
 @Title = 'Sales';

我应该像@lastName nvarchar(75)= Null吗?

3 个答案:

答案 0 :(得分:4)

你有一行Execute NewEmployee1 ;试图执行没有参数的存储过程。

如果您想要为参数分配默认值,则需要按照建议...

进行操作
CREATE PROCEDURE NewEmployee1 (
  @LastName nvarchar(75)   = NULL
 ,@FirstName nvarchar(50)  = NULL
 ,@HireDate datetime       = NULL
 ,@Birthdate datetime      = NULL
 ,@Title nvarchar(30)      = NULL
)

或者用任何适当的默认值替换NULL。

答案 1 :(得分:3)

您将过程定义为NewEmployee1,然后拨打NewEmployee


编辑:

我认为在Execute NewEmployee1 ;语句中调用CATCH可能会导致无限循环,如果在使用默认值调用存储过程时出现问题...你确定要调用SP再次出现在CATCH

答案 2 :(得分:1)

我看到了

CREATE PROCEDURE **NewEmployee1**

当你稍后使用

打电话时
Exec NewEmployee

没有名称末尾的1。

可能你有另一个程序NewEmployee,它没有param @LastName。