日期:2014-05-17  浏览次数:20616 次

请教以下存储规程中select的用法
create procedure nn
as
declare @x date
set @x='2012-11-11'
select @x 
执行后,结果如下:
USE [smfbook]
GO

DECLARE @return_value int

EXEC @return_value = [dbo].[nn]

SELECT 'Return Value' = @return_value

GO
1.select @x,select后面直接跟了一个变量,其他都省略了这是什么意思或是什么用法?
2.执行的结果,返回的是变量@x的值2012-11-11,这个返回的结果,在VB中怎么调用呢?
3.执行时,系统自定义了一个返回变量@return_value ,这个返回变量,是用于接收存储过程的执行状况的结果,是这样理解的吗?这里的 SELECT 'Return Value' = @return_value
这里的select是什么用法?

------解决方案--------------------
1.select后面直接跟了一个变量,是要把這個變數顯示出來.其實是以集的形式顯示出來
2.如果VB中用,應該要把存儲過程中select @x 改為 select @x as x,這樣有一個列名就可以取出來了.
3.理解是對的.SELECT 'Return Value' = @return_value和SELECT  @return_value as 'Return Value'是一樣的,'Return Value'做為列名稱.
------解决方案--------------------
引用:
create procedure nn
as
declare @x date
set @x='2012-11-11'
select @x 
执行后,结果如下:
USE [smfbook]
GO

DECLARE @return_value int

EXEC @return_value = [dbo].[nn]

SELECT 'Return V……

EXEC @return_value = [dbo].[nn]
--这是获取Return返回值,没出错时默认为0,出错时需要有retrun 1的语句才能获取值

楼主的情况应该用output
create procedure nn(@x date output)
as
set @x='2012-11-11'
go

declare @value date
exec nn @x=@value output
select @x

 
------解决方案--------------------
前面的是自己没有上机调试过的就贴出来的,一调试不能通过,报歉!下面是调试好的
存储过程一般只有一个返回值,就是4楼所说方法。如果你需要返回数据表的话,建议写SQL的“函数”来实现。
create function nn(@x datetime) returns TABLE
as
return (select @x  as x )

VB调用
Private sqlcon As New ADODB.Connection
Private sqlres As New ADODB.Recordset
sqlcon.Provider = "SQLOLEDB.1"
sqlcon.Open "User ID = sa;Password=sad23456789;Initial Catalog=mm;Data Source=dd"
sqlcon.CursorLocation = adUseClient
sqlres.open "select * from nn('2012-11-11')",sqlcon,3,3
print sqlres.fields(0).value
sqlres.close
set sqlres=nothing
sqlcon.close
set sqlcon=nothing