了解SQL SErver存储过程

Sui*_*eep 1 t-sql sql-server stored-procedures

Create  PROCEDURE alertCount 
(
@field1 VARCHAR(200),
@field2 INT,
@field3 INT,
@field4 INT,
@field5 INT,
@field6 INT,

@noOfCount INT  OUT        
)
AS
BEGIN
SELECT @noOfCount = COUNT(*) from tableA
END
Run Code Online (Sandbox Code Playgroud)

我对存储过程很新,基于一些教程,上面的代码帮助我创建一个过程(我希望它工作正常).

Declare @noOfCount as INT
Exec alertCount asd, 1, 1, 1, 1, 1, @noOfCount
select @noOfCount
Run Code Online (Sandbox Code Playgroud)

现在上面的代码假设返回9,因为我的tableA中有9行记录,但它返回了我null.我可以知道它有什么问题吗?

P/S:请不要理会逻辑.我只是想了解一个非常简单的存储过程.谢谢.

Rom*_*kar 6

你必须用out(或output关键字)传递参数

Declare @noOfCount as INT
Exec usp_AlertCount asd, 1, 1, 1, 1, 1, @noOfCount out
select @noOfCount
Run Code Online (Sandbox Code Playgroud)

从我的到期,通过名称传递参数(更容易维护)也更好:

declare @noOfCount int

exec usp_AlertCount
    @field1 = 'asd',
    @field2 = 1,
    @field3 = 1,
    @field4 = 1,
    @field5 = 1,
    @field6 = 1, 
    @noOfCount = @noOfCount output

select @noOfCount
Run Code Online (Sandbox Code Playgroud)

sql fiddle demo