CREATE PROCEDURE test AS
declare @return_value varchar(14)
select @return_value=abcde
return @return_value
GO
不可以,只能是int型
可以使用函数返回varchar型
return 只能返回整型,你可以用output返回varchar型的
D. 使用 OUTPUT 参数
OUTPUT 参数允许外部过程、批处理或多条 Transact-SQL 语句访问在过程执行期间设置的某个值。下面的示例创建一个存储过程 (titles_sum),并使用一个可选的输入参数和一个输出参数。
首先,创建过程:
USE pubs
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name = titles_sum AND type = P)
DROP PROCEDURE titles_sum
GO
USE pubs
GO
CREATE PROCEDURE titles_sum @TITLE varchar(40) = %, @SUM money OUTPUT
AS
SELECT Title Name = title
FROM titles
WHERE title LIKE @TITLE
SELECT @SUM = SUM(price)
FROM titles
WHERE title LIKE @TITLE
GO
接下来,将该 OUTPUT 参数用于控制流语言。
说明 OUTPUT 变量必须在创建表和使用该变量时都进行定义。
参数名和变量名不一定要匹配,不过数据类型和参数位置必须匹配。
DECLARE @TOTALCOST money
EXECUTE titles_sum The%, @TOTALCOST OUTPUT
IF @TOTALCOST < 200
BEGIN
PRINT
PRINT All of these titles can be purchased for less than $200.
END
ELSE
SELECT The total cost of these titles is $
+ RTRIM(CAST(@TOTALCOST AS varchar(20)))
下面是结果集:
Title Name
------------------------------------------------------------------------
The Busy Executives Database Guide
The Gourmet Microwave
The Psychology of Computer Cooking
(3 row(s) affected)
Warning, null value eliminated from aggregate.
All of these titles can be purchased for less than $200.
E. 使用 OUTPUT 游标参数
OUTPUT 游标参数用来将存储过程的局部游标传递回调用批处理、存储过程或触发器。
首先,创建以下过程,在 titles 表上声明并打开一个游标:
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = titles_cursor and type = P)
DROP PROCEDURE titles_cursor
GO
CREATE PROCEDURE titles_cursor @titles_cursor CURSOR VARYING OUTPUT
AS
SET @titles_cursor = CURSOR
FORWARD_ONLY STATIC FOR
SELECT *
FROM titles
OPEN @titles_cursor
GO
接下来,执行一个批处理,声明一个局部游标变量,执行上述过程以将游标赋值给局部变量,然后从该游标提取行。
USE pubs
GO
DECLARE @MyCursor CURSOR
EXEC titles_cursor @titles_cursor = @MyCursor OUTPUT
WHILE (@@FETCH_STATUS = 0)
BEGIN
FETCH NEXT FROM @MyCursor
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
GO