请教以下存储规程中select的用法

happywork8 2013-01-19 09:11:36
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是什么用法?
...全文
306 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
happywork8 2013-01-27
  • 打赏
  • 举报
回复
问题解决了,结贴吧
happywork8 2013-01-20
  • 打赏
  • 举报
回复
实际上,如果不加set nocount on/off语句的话,执行以下语句后将会出现:“实时错误,3704,对象关闭时,不允许操作”。让人一头雾水~~! 似乎存储过程的写法及优化,不是在server中执行OK就OK了,会直接影响外接程序的调用! Private Sub Command2_Click() Set sqlres = sqlcmd.Execute() print sqlres.recordcount End Sub
happywork8 2013-01-20
  • 打赏
  • 举报
回复
感谢dong_y888的解答。 我在原先的存储过程中加了set nocount on/off语句,VB调用的语句不变,执行后,ok了 http://bbs.csdn.net/topics/80067788参考此帖 有人说:存储过程 SET NOCOUNT ON:当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。 不过我还是有些困惑,好像并不能解释本例中之前在vb调用中出现的问题 http://bbs.csdn.net/topics/80067788中aohan谈到“这个可能与你的存储过程有很大关系,比如存储过程内有多个返回结果,导致问题出现” 可我只要返回一个结果2012-11-11啊,难道是定义了变量@x的缘故??还是“set nocount on/off“语句有别的什么功能?? 好神奇的set nocount on/off~~~ create procedure nn as set nocount on declare @x date set @x='2012-11-11' select @x set nocount off
fsy123456accp 2013-01-19
  • 打赏
  • 举报
回复
引用 1 楼 sjcss 的回复:
1.select后面直接跟了一个变量,是要把這個變數顯示出來.其實是以集的形式顯示出來 2.如果VB中用,應該要把存儲過程中select @x 改為 select @x as x,這樣有一個列名就可以取出來了. 3.理解是對的.SELECT 'Return Value' = @return_value和SELECT @return_value as 'Return ……
赞一个!
美到心痛 2013-01-19
  • 打赏
  • 举报
回复
1.select后面直接跟了一个变量,是要把這個變數顯示出來.其實是以集的形式顯示出來 2.如果VB中用,應該要把存儲過程中select @x 改為 select @x as x,這樣有一個列名就可以取出來了. 3.理解是對的.SELECT 'Return Value' = @return_value和SELECT @return_value as 'Return Value'是一樣的,'Return Value'做為列名稱.
dong_y888 2013-01-19
  • 打赏
  • 举报
回复
前面的是自己没有上机调试过的就贴出来的,一调试不能通过,报歉!下面是调试好的 存储过程一般只有一个返回值,就是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
dong_y888 2013-01-19
  • 打赏
  • 举报
回复
存储过程一般只有一个返回值,就是4楼所说方法。如果你需要返回数据表的话,建议写SQL的“函数”来实现。
create function nn() return table
as
declare @x date
set @x='2012-11-11'
return (select @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()",sqlcon,3,3
print sqlres.fields(0).value
sqlres.close
set sqlres=nothing
sqlcon.close
set sqlcon=nothing
happywork8 2013-01-19
  • 打赏
  • 举报
回复
感谢roy版及各位的指教,但如果不用output,VB中能够得到select @x 的返回结果2012-11-11吗? Private sqlcon As New ADODB.Connection Private sqlres As New ADODB.Recordset Private sqlcmd As New ADODB.Command Private sqlpar As ADODB.Parameter Private Sub Form_Load() sqlcon.Provider = "SQLOLEDB.1" sqlcon.Open "User ID = sa;Password=sad23456789;Initial Catalog=mm;Data Source=dd" sqlcmd.ActiveConnection = sqlcon sqlcon.CursorLocation = adUseClient sqlcmd.CommandText = "nn" sqlcmd.CommandType = adCmdStoredProc End Sub Private Sub Command2_Click() Set sqlres = sqlcmd.Execute() Print sqlres.Fields("x").Value End Sub 按照sjcss 所说“把存儲過程中select @x 改為 select @x as x,這樣有一個列名就可以取出來了.,”运行后,得不到select @x的结果,错误为“在对应所需名称或序数的集合中,未找到项目!” 改成sqlres.Fields(0).Value,执行的结果也是一样的错误 改成set datagrid1.datasource=sqlres,执行后,没有出错,但实际上datagrid1中没有任何数据 似乎是没有任何结果返回? 不知道是哪里出了问题,还请各位给予指教,谢谢!
中国风 2013-01-19
  • 打赏
  • 举报
回复
引用 楼主 happywork8 的回复:
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
-Tracy-McGrady- 2013-01-19
  • 打赏
  • 举报
回复
select @变量 --是显示出来噻。 哎哟喂,自己多试试,看看效果,VB里面要弄个别名,调用时候使用别名 至于第三个问,跟你理解的差不多。 多试试,多写写

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧