CCC*_*CCC 1 sql sql-server-2008
我有这样的存储过程,
USE MyDataBaseName
GO
CREATE PROCEDURE h_sp_find_exist
@in_name varchar,@in_counterparty varchar,
@out_recordsNum int OUTPUT
AS
BEGIN
SELECT @out_recordsNum = COUNT(*)
FROM TMyTableName
WHERE Name=@in_name AND Counterparty=@in_counterparty
RETURN @out_recordsNum
END
Run Code Online (Sandbox Code Playgroud)
我总是从返回值得到0.它出什么问题了?
执行代码:
use MyDataBaseName
go
declare @retRecordNum int
execute h_sp_find_exist 'myName', '50139', @retRecordNum OUTPUT
select @retRecordNum as 'RecordNumber'
Run Code Online (Sandbox Code Playgroud)
如果我只运行sql代码,选择count(*)where name ='myName'和counterparty ='50139',它可以工作,结果是1
您的输入参数被截断,因为您没有为varchar提供长度,默认值为1.(你也像其他人说的那样,不需要返回声明):
CREATE PROCEDURE h_sp_find_exist
@in_name varchar(20),@in_counterparty varchar(20), --<-- changes here
@out_recordsNum int OUTPUT
AS
BEGIN
SELECT @out_recordsNum = COUNT(*)
FROM TMyTable
WHERE Name=@in_name AND Counterparty=@in_counterparty
END
Run Code Online (Sandbox Code Playgroud)
Return设置存储过程的退出代码.这只能是一个整数,通常用于表示成功或失败.您可以通过将其指定为exec语句的一部分来获取返回值:
declare @retRecordNum int
declare @returnCode int
execute @returnCode = h_sp_find_exist 'myName', '50139', @retRecordNum OUTPUT
select @retRecordNum as 'RecordNumber'
Run Code Online (Sandbox Code Playgroud)
在这里,@returnCode将分配传递给return语句的任何值
| 归档时间: |
|
| 查看次数: |
1744 次 |
| 最近记录: |