存储过程returns 0 而不是值
Stored procedure returns 0 instead of value
有一个存储过程可以 return 前 1 个结果为
USE [DB]
GO
.....
CREATE PROCEDURE [dbo].[GET]
(@in VARCHAR(10), @Out VARCHAR(10) OUTPUT)
AS
SELECT top 1 @Out = tab.Col
FROM table tab
RETURN
GO
当我在主查询中调用它时
DECLARE @output VARCHAR(10)
DECLARE @in VARCHAR(10)
DECLARE @Out VARCHAR(10)
EXECUTE dbo.GET @in = 'table', @Out = @output
它将 @output
打印为 0;
但如果我这样做
EXECUTE dbo.GET @in = 'table', @Out = @Out
然后打印 @out
,我得到了正确的值。
为什么会这样?
我确实将输出 @Out
传递给预定义变量 @output
如果是MySql(限制在mySql),你可以直接调用:
Call dbo.GET('table', @out);
不需要单独的变量@output
。
假设 SQLS 由于存在 'dbo' 和 sqlserver 标记
您在过程中的查询没有为 out 参数(称为 @out)分配值,它分配给其他一些名为 @outpk 的变量。解决命名不匹配,使它们相同
Sqlserver 不支持 LIMIT。要限制结果集大小,请使用 SELECT TOP 1 *
。在没有 ORDER BY 的情况下使用 TOP(或任何类似的结果集限制器)是不合逻辑的。指定一个 ORDER BY
在sqlserver中,调用过程时必须使用OUTPUT关键字传递输出参数:
EXEC sprocname @inputparameter ='value', @outputparameter = @variableToSet OUTPUT;
使用分号;省略它们已被弃用
例子
USE [DB]
GO
CREATE PROCEDURE [dbo].[GET]
(@in VARCHAR(10), @OutPk VARCHAR(10) OUTPUT)
AS
SELECT @OutPK = tab.Col
FROM table tab
ORDER BY tab.Col;
GO
DECLARE @output VARCHAR(10);
EXECUTE dbo.GET @in = 'table', @OutPK = @output OUTPUT
SELECT @output;
有一个存储过程可以 return 前 1 个结果为
USE [DB]
GO
.....
CREATE PROCEDURE [dbo].[GET]
(@in VARCHAR(10), @Out VARCHAR(10) OUTPUT)
AS
SELECT top 1 @Out = tab.Col
FROM table tab
RETURN
GO
当我在主查询中调用它时
DECLARE @output VARCHAR(10)
DECLARE @in VARCHAR(10)
DECLARE @Out VARCHAR(10)
EXECUTE dbo.GET @in = 'table', @Out = @output
它将 @output
打印为 0;
但如果我这样做
EXECUTE dbo.GET @in = 'table', @Out = @Out
然后打印 @out
,我得到了正确的值。
为什么会这样?
我确实将输出 @Out
传递给预定义变量 @output
如果是MySql(限制在mySql),你可以直接调用:
Call dbo.GET('table', @out);
不需要单独的变量@output
。
假设 SQLS 由于存在 'dbo' 和 sqlserver 标记
您在过程中的查询没有为 out 参数(称为 @out)分配值,它分配给其他一些名为 @outpk 的变量。解决命名不匹配,使它们相同
Sqlserver 不支持 LIMIT。要限制结果集大小,请使用 SELECT TOP 1 *
。在没有 ORDER BY 的情况下使用 TOP(或任何类似的结果集限制器)是不合逻辑的。指定一个 ORDER BY
在sqlserver中,调用过程时必须使用OUTPUT关键字传递输出参数:
EXEC sprocname @inputparameter ='value', @outputparameter = @variableToSet OUTPUT;
使用分号;省略它们已被弃用
例子
USE [DB]
GO
CREATE PROCEDURE [dbo].[GET]
(@in VARCHAR(10), @OutPk VARCHAR(10) OUTPUT)
AS
SELECT @OutPK = tab.Col
FROM table tab
ORDER BY tab.Col;
GO
DECLARE @output VARCHAR(10);
EXECUTE dbo.GET @in = 'table', @OutPK = @output OUTPUT
SELECT @output;