Sql server 我们可以从存储过程返回null吗
我们可以从存储过程返回空值吗。我不想使用collase或isnull。我想在前端捕获NULL。可能吗 编辑: 我正在使用Sql server 我们可以从存储过程返回null吗,sql-server,database,sql-server-2005,tsql,stored-procedures,Sql Server,Database,Sql Server 2005,Tsql,Stored Procedures,我们可以从存储过程返回空值吗。我不想使用collase或isnull。我想在前端捕获NULL。可能吗 编辑: 我正在使用SQLServer2005 我想在哪里使用 CREATE PROCEDURE [Authentication].[spOnlineTest_CheckLogin] @UserName NVARCHAR(50) AS BEGIN TRY BEGIN TRAN COMMIT TRAN RETURN NULL
SQLServer2005
我想在哪里使用
CREATE PROCEDURE [Authentication].[spOnlineTest_CheckLogin]
@UserName NVARCHAR(50)
AS
BEGIN TRY
BEGIN TRAN
COMMIT TRAN
RETURN NULL
END TRY
错误
“spOnlineTest_CheckLogin”过程试图返回NULL状态,这是不允许的。将返回0的状态。
消息0,11级,状态0,第0行
当前命令发生严重错误。如果有结果,则应放弃 否,存储过程的返回类型为
INT
,不能为null。例如,使用输出参数
CREATE PROCEDURE Test
@UserName NVARCHAR(50), @Status int output
AS
BEGIN TRY
BEGIN TRAN
COMMIT TRAN
set @Status = null
END TRY
begin catch
end catch
go
那就这样说吧
declare @s int
set @s =5
exec Test'bla',@s output
select @s --will be null
你可以想象下面这样的过程。让我先说明一下背景。我们可能有一个表
Table1(id int,name varchar(2),Address varchar(2))
并希望获取该id,如果找不到,则该id将为null。因此,我们可以编写如下的过程:
CREATE PROCEDURE GetId
@Name VARCHAR(50), @Status int output
AS
BEGIN TRY
set @Status = null
select @Status = id from Table1 where name=@name
这对您很有用。您使用的是什么数据库?SQL Server、MySQL等等?@Justin:Q被标记为T-SQL。这是SQL Server。@Mehrdad Afshari,Sybase也使用T-SQL。存储过程的输入参数可以是INT,但仍然可以赋值为NULL,那么为什么不返回参数呢?@Chris:语言就是这样设计的。我怀疑对于其预期用例来说,它是一个失败/成功状态,不为null是有意义的。