当前位置:首页 » 编程语言 » sqlreturnoutput
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlreturnoutput

发布时间: 2022-09-22 05:04:01

‘壹’ 简单sql存储过程实例、储过程实战

实例1:只返回单一记录集的存储过程。
银行存款表(bankMoney)的内容如下
Id
userID
Sex
Money
001
Zhangsan

30
002
Wangwu

50
003
Zhangsan

40
要求1:查询表bankMoney的内容的存储过程
create
procere
sp_query_bankMoney
as
select
*
from
bankMoney
go
exec
sp_query_bankMoney
注*
在使用过程中只需要把中的SQL语句替换为存储过程名,就可以了很方便吧!
实例2(向存储过程中传递参数):
加入一笔记录到表bankMoney,并查询此表中userID=
Zhangsan的所有存款的总金额。
Create
proc
insert_bank
@param1
char(10),@param2
varchar(20),@param3
varchar(20),@param4
int,@param5
int
output
with
encryption
---------加密
as
insert
bankMoney
(id,userID,sex,Money)
Values(@param1,@param2,@param3,
@param4)
select
@param5=sum(Money)
from
bankMoney
where
userID='Zhangsan'
go
在SQL
Server查询分析器中执行该存储过程的方法是:
declare
@total_price
int
exec
insert_bank
'004','Zhangsan','男',100,@total_price
output
print
'总余额为'+convert(varchar,@total_price)
go
在这里再啰嗦一下存储过程的3种传回值(方便正在看这个例子的朋友不用再去查看语法内容):
1.以Return传回整数
2.以output格式传回参数
3.Recordset
传回值的区别:
output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。
实例3:使用带有复杂
SELECT
语句的简单过程
下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以及出版社。该存储过程不使用任何参数。
USE
pubs
IF
EXISTS
(SELECT
name
FROM
sysobjects
WHERE
name
=
'au_info_all'
AND
type
=
'P')
DROP
PROCEDURE
au_info_all
GO
CREATE
PROCEDURE
au_info_all
AS
SELECT
au_lname,
au_fname,
title,
pub_name
FROM
authors
a
INNER
JOIN
titleauthor
ta
ON
a.au_id
=
ta.au_id
INNER
JOIN
titles
t
ON
t.title_id
=
ta.title_id
INNER
JOIN
publishers
p
ON
t.pub_id
=
p.pub_id
GO
au_info_all
存储过程可以通过以下方法执行:
EXECUTE
au_info_all
实例4:使用带有参数的简单过程
CREATE
PROCEDURE
au_info
@lastname
varchar(40),
@firstname
varchar(20)
AS
SELECT
au_lname,
au_fname,
title,
pub_name
FROM
authors
a
INNER
JOIN
titleauthor
ta
ON
a.au_id
=
ta.au_id
INNER
JOIN
titles
t
ON
t.title_id
=
ta.title_id
INNER
JOIN
publishers
p
ON
t.pub_id
=
p.pub_id
WHERE
au_fname
=
@firstname
AND
au_lname
=
@lastname
GO
au_info
存储过程可以通过以下方法执行:
EXECUTE
au_info
'Dull',
'Ann'
--
Or
EXECUTE
au_info
@lastname
=
'Dull',
@firstname
=
'Ann'
--
Or
EXECUTE
au_info
@firstname
=
'Ann',
@lastname
=
'Dull'
实例5:使用带有通配符参数的简单过程
CREATE
PROCEDURE
au_info2
@lastname
varchar(30)
=
'D%',
@firstname
varchar(18)
=
'%'
AS
SELECT
au_lname,
au_fname,
title,
pub_name
FROM
authors
a
INNER
JOIN
titleauthor
ta
ON
a.au_id
=
ta.au_id
INNER
JOIN
titles
t
ON
t.title_id
=
ta.title_id
INNER
JOIN
publishers
p
ON
t.pub_id
=
p.pub_id
WHERE
au_fname
LIKE
@firstname
AND
au_lname
LIKE
@lastname
GO
au_info2
存储过程可以用多种组合执行。下面只列出了部分组合:
EXECUTE
au_info2
--
Or
EXECUTE
au_info2
'Wh%'
--
Or
EXECUTE
au_info2
@firstname
=
'A%'
--
Or
EXECUTE
au_info2
'[CK]ars[OE]n'
--
Or
EXECUTE
au_info2
'Hunter',
'Sheryl'
--
Or
EXECUTE
au_info2
'H%',
'S%'

‘贰’ 在sql Server中~如何利用RETURN返回存储过程的值~~~

假设有这样定义的存储过程checkstateCREATE PROCEDURE checkstate @param varchar(11) AS IF (SELECT state FROM authors WHERE au_id = @param) = 'CA' RETURN 1 ELSE RETURN 2 下例显示从 checkstate 执行中返回的状态。第一个显示的是在加利福尼亚州的作者;第二个显示的是不在加利福尼亚州的作者,第三个显示的是无效的作者。必须先声明 @return_status 局部变量后才能使用它。DECLARE @return_status int EXEC @return_status = checkstate '172-32-1176' SELECT 'Return Status' = @return_status GO OutPut是通过参数传递值的

‘叁’ sql中 return 与output 的区别

共同点:都返回值(但return只能返回int类型)
不同点:1. output是定义变量是不是可以返回值
2. output没有return从查询或过程中无条件退出的工功
3. return返回值在函数和过程定义时不需要用output来定义

‘肆’ 如何接收sql语句执行.的返回值

获取存储过程返回值及代码中获取返回值
1.OUPUT参数返回值
例: 向Order表插入一条记录,返回其标识

CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERT INTO [Order](o_buyerid )
VALUES (@o_buyerid )
SET @o_id = @@IDENTITY
END
END
存储过程中获得方法:

DECLARE @o_buyerid int
DECLARE @o_id bigint
EXEC [nb_order_insert] @o_buyerid ,o_id bigint
2.RETURN过程返回值

CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
IF(EXISTS(SELECT * FROM [Shop] WHERE [s_id] = @o_shopid))
BEGIN
INSERT INTO [Order](o_buyerid )
VALUES (@o_buyerid )
SET @o_id = @@IDENTITY
RETURN 1 — 插入成功返回1
END
ELSE
RETURN 0 — 插入失败返回0
END
存储过程中的获取方法
DECLARE @o_buyerid int
DECLARE @o_id bigint
DECLARE @result bit
EXEC @result = [nb_order_insert] @o_buyerid ,o_id bigint
3.SELECT 数据集返回值

CREATE PROCEDURE [dbo].[nb_order_select](
@o_id int
)
AS
BEGIN
SET NOCOUNT ON;
SELECT o_id,o_buyerid FROM [Order]
WHERE o_id = @o_id
GO
存储过程中的获取方法
(1)、使用临时表的方法

CREATE TABLE [dbo].[Temp](
[o_id] [bigint] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[o_buyerid] [int] NOT NULL
)
INSERT [Temp] EXEC [nb_order_select] @o_id
– 这时 Temp 就是EXEC执行SELECT 后的结果集
SELECT * FROM [Temp]
DROP [Temp] — 删除临时表
(2)、速度不怎么样.(不推荐)

SELECT * from openrowset(’provider_name','Trusted_Connection=yes’,'exec nb_order_select’)

1.获取Return返回值

程序代码
//存储过程
//Create PROCEDURE MYSQL
// @a int,
// @b int
//AS
// return @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcere;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 10;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@return"].Value.ToString());
2.获取Output输出参数值

程序代码
//存储过程
//Create PROCEDURE MYSQL
// @a int,
// @b int,
// @c int output
//AS
// Set @c = @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcere;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.Int));
MyCommand.Parameters["@c"].Direction = ParameterDirection.Output;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@c"].Value.ToString());

C#接收存储过程返回值:
public static int User_Add(User us)
{
int iRet;
SqlConnection conn = new SqlConnection(Conn_Str);
SqlCommand cmd = new SqlCommand("User_Add", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddWithValue("@UName", us.UName);
cmd.Parameters.AddWithValue("@UPass", us.UPass);
cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);
cmd.Parameters.AddWithValue("@PassKey", us.PassKey);
cmd.Parameters.AddWithValue("@Email", us.Email);
cmd.Parameters.AddWithValue("@RName", us.RName);
cmd.Parameters.AddWithValue("@Area", us.Area);
cmd.Parameters.AddWithValue("@Address", us.Address);
cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);
cmd.Parameters.AddWithValue("@Phone", us.Phone);
cmd.Parameters.AddWithValue("@QQ", us.QQ);
cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;
try
{
conn.Open();
cmd.ExecuteNonQuery();
iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
return iRet;
}
C#接收存储过程输出参数:
public static decimal Cart_UserAmount(int UID)
{
decimal iRet;
SqlConnection conn = new SqlConnection(Conn_Str);
SqlCommand cmd = new SqlCommand("Cart_UserAmount", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddWithValue("@UID", UID);
cmd.Parameters.Add("@Amount", SqlDbType.Decimal).Direction=ParameterDirection.Output;
try
{
conn.Open();
cmd.ExecuteNonQuery();
iRet = (decimal)cmd.Parameters["@Amount"].Value;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
return iRet;
}

//////////////////////////////////////////////////////////////
SQL 2000用户自定义函数 一。SQL Server 的三种自定义函数
“自定义函数”是我们平常的说法,而“用户定义的函数”是 SQL Server 中书面的说法。
SQL Server 2000 允许用户创建自定义函数,自定义函数可以有返回值。
自定义函数分为:标量值函数或表值函数
•如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。
•如果 RETURNS 子句指定 TABLE,则函数为表值函数。
表值函数又可分为:内嵌表值函数(行内函数)或多语句函数
•如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。
•如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。
标量值函数示例
CREATE FUNCTION dbo.Foo()
RETURNS int
AS
BEGIN
declare @n int
select @n=3
return @n
END
create function GetSex(@sex int)
returns varchar(2)-- 用nvarchar(1)
as -- nvarchar:不管是一个字符还是一个汉字,都存为2个字节
begin -- varchar:汉字是2个字节,其他字符存为1个字节
declare @ssex varchar(2)-- 用nvarchar(1)
if(@sex=1)
set @ssex='男'
else
set @ssex='女'
return (@ssex)
end
调用:
select id,username,dbo.GetSex(Sex) as sex ,loginnum from t_user
内嵌表值函数示例
CREATE FUNCTION dbo.Foo()
RETURNS TABLE
AS
return select id, title from msgs
内嵌表值函数只有一个 select 语句。
多语句表值函数示例(部分)
CREATE FUNCTION FindUsers (@userid int )
RETURNS @FindUser TABLE (id int primary key, UserName varchar(30), RegDateTime DateTime,LoginNum int)
as
begin
insert into @FindUser Select ID, UserName,RegDateTime,LoginNum From T_User Where ID=@userid
return
end
调用:
SELECT * FROM FindUsers(6)
注意其 RETURNS 部分。
多语句函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。
•赋值语句。
•控制流语句。
•DECLARE 语句,该语句定义函数局部的数据变量和游标。
•SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
•游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
•INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
•EXECUTE 语句调用扩展存储过程。
二.如何调用自定义函数

调用自定义函数(用户定义的函数)和调用内置函数方式基本相同,
•当调用标量值函数时,必须加上“所有者”,通常是 dbo(但不是绝对,可以在企业管理器中的“用户定义的函数”中查看所有者)。
•当调用表值函数时,可以只使用函数名称。
示例
SELECT *
select dbo.Sta(cnt) from tbl
示例
SELECT *
FROM fn_MyTableFunc( 123.09, N'O''Neill' )
三。存储过程和自定义函数的区别
存储过程(用户定义的存储过程)和自定义函数(用户定义的函数)的区别,在网上已经有讨论过,但有些显得过于零散,有些又篇幅过长不能保证每个人都细心阅读。这里作一个归纳,当然只是应用层面的,可能不全面。
•存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程。
•自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作。

•存储过程,可以使用非确定函数。
•自定义函数,不允许在用户定义函数主体中内置非确定函数。

•存储过程,可返回记录集。
•自定义函数,可以返回表变量。

•存储过程,其返回值不能被直接引用。
•自定义函数,其返回值可以被直接引用。

•存储过程,用 EXECUTE 语句执行。
•自定义函数,在查询语句中调用。

‘伍’ sql语句包含怎么写

sql语句包含可写成:select * from table1 where field1 like ’%value1%’(所有包含‘value1’这个模式的字符串)。

sql语句用于数据库查询和程序设计,比如查询表中某字段值“包含”某字符串的所有记录的方法如下:

如果表中有一个name字段,查询name包含“张三”的所有记录,就可以这样写:Stirng strsql="SELECT * FROM 表名 WHERE name LIKE ’%"+"张三"+"%’"。

(5)sqlreturnoutput扩展阅读

sql语句包含的关联词

据了解,sql语句查询某字段值“包含于”某个字符串的所有记录的方法如下:

如果查询表中name字段包含于字符串“张三是个好学生”的所有记录,就可以这样写:String strsql="SELECT * FROM 表名 WHERE INSTR(’张三是个好学生’,name)>0"(记录中的name字段值中包括张、三、是、个、好、学、生、张三等所有记录)。

‘陆’ sql存储过程中的output的作用是什么

output的参数是输出参数,执行完了存储过程之后,这个参数的值会发生变化

不能理解为return,如果要类比,你可以理解为ref或者Out

‘柒’ sql中return和output有什么区别,在C#的C/S结构中咋处理返回值

--===================================================================
--创建存储过程——用户登录(UserLogon)
--===================================================================
USE TestDemo
GO
IF OBJECT_ID ('dbo.proc_UserLogon', 'P') IS NOT NULL
DROP PROCEDURE dbo.proc_UserLogon;
GO
CREATE PROCEDURE proc_UserLogon
(
@UserID char(10), --用户号码
@UserPassword char(32), --用户密码
@UserRole nvarchar(10) OUTPUT, --用户权限
@StrError nvarchar(50) OUTPUT --错误处理
)
AS
--查询用户表并获取权限
SELECT @UserRole = UserRole FROM dbo.Users
WHERE UserID = @UserID AND UserPassword = @UserPassword
--存在该用户则立即返回
IF @@ROWCOUNT <> 0 BEGIN
SET @StrError = ''
RETURN
END
--用户不存在于用户表则继续查询会员信息表
SELECT * FROM dbo.MemberInfo
WHERE HY_ID = @UserID AND HY_Pwd = @UserPassword
--存在则立即返回,否则提示错误
IF @@ROWCOUNT <> 0 BEGIN
SET @StrError = ''
RETURN
END
ELSE BEGIN
SET @StrError = N'用户和密码不匹配,登录失败!'
END
GO

//添加的命名空间

using System.Data.SqlClient;

using System.Configuration;

/// <summary>

/// 【登录】按钮

/// </summary>

private void btnLogon_Click(object sender, EventArgs e)

{

if (this.txtUserID.Text.Trim() == "") MessageBox.Show("非法登录,请输入用户!");

else

{

SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);

//创建命令对象,设置查询语句为登录的存储过程名称

SqlCommand cmd = new SqlCommand("proc_UserLogon", conn);

//指定命令的类型为存储过程

cmd.CommandType = CommandType.StoredProcere;

//依次添加存储过程中的4个参数

cmd.Parameters.Add("@UserID", SqlDbType.Char, 10);

cmd.Parameters.Add("@UserPassword", SqlDbType.Char, 32);

cmd.Parameters.Add("@UserRole", SqlDbType.NVarChar, 8);

cmd.Parameters.Add("@StrError", SqlDbType.NVarChar, 50);

//依次为参数赋值

cmd.Parameters["@UserID"].Value = this.txtUserID.Text.Trim();

cmd.Parameters["@UserPassword"].Value = this.txtUserPwd.Text.Trim();

//参数@UserRole和@StrError为输出参数,必须明确指定

cmd.Parameters["@UserRole"].Direction = ParameterDirection.Output;

cmd.Parameters["@StrError"].Direction = ParameterDirection.Output;

try

{ conn.Open(); //打开数据库连接

cmd.ExecuteNonQuery(); //执行命令

}

catch (Exception ex) { MessageBox.Show(ex.Message); }

finally { conn.Close(); } //关闭数据库连接

//读取返回的错误

string StrError = cmd.Parameters["@StrError"].Value.ToString();

if (StrError == "") //判断存储过程执行的结果

{

string Role = cmd.Parameters["@UserRole"].Value.ToString();

qgMain qg = new qgMain();

qg.Uid = this.txtUserID.Text.Trim(); //传递用户号

qg.Pwd = this.txtUserPwd.Text.Trim(); //传递用户密码

qg.Role = Role; //传递权限

qg.Show();

this.Hide(); //隐藏登录窗口

}

else MessageBox.Show(StrError);

}

}

/// <summary>

/// 【退出】按钮

/// </summary>

private void btnExist_Click(object sender, EventArgs e)

{ Application.Exit(); } //退出当前系统

‘捌’ sql存储过程中output参数怎么使用

output 就是这个存储过程返回的值 也可以说输出的值
--创建存储过程 求最大值
CREATE PROCEDURE [dbo].[P_Max]
@a int, -- 输入
@b int, -- 输入
@Returnc int output --输出
AS

if (@a>@b)
set @Returnc =@a
else
set @Returnc =@b

-- 调用
declare @Returnc int
exec P_Max 2,3,@Returnc output
select @Returnc

‘玖’ SQL中存储过程out与output有什么不同,感觉它俩是同一个意思,一样的用法,都是用于输出。求

你好题主,刚好最近我也在学习SQL,不过我在学习的是Oracle,

MSSQL和Oracle倒是有很多不同的地方。

所以我特意打开MSSQL的服务,在MSSQL里写了这么一个脚本,希望能帮助到你。

因为本人是做.Net方向的开发者,所以用了C#语言中

以下是脚本内容:

--SQLQueryCreateByFaywool
createprocProc_OutPutTest--创建
@numAint,--numA为存储过程的参数
@numBint,--numB为另一参数
@numReturnintoutput--此为Output,也就是存储过程的返回值
as
begin
if(@numA>@numB)
set@numReturn=@numA
else
set@numReturn=@numB--A>B的时候返回A,否则返回B
end

go


declare@numReceiveint--先声明一个变量用来接收存储过程的返回值
execProc_OutPutTest1,2,@numReceiveoutput
--调用存储过程并用@numReturn接收存储过程的返回值
select@numReceive--将会返回(1,2)中较大的数字:2

go

createprocProc_OutTest--新建存储过程
@numCint,--参数C
@numDint,--参数D
@numEintout--参数E用来返回
as
begin
if(@numC>@numD)
set@numE=@numC--如果C>D,将C赋值给E
else
set@numE=@numD--否则将D赋值给E
end

go


declare@numOutReceiveint--声明一个变量
set@numOutReceive=10000--将变量赋值为10000
select@numOutReceive--变量变为10000
execProc_OutTest1,2,@numOutReceiveout--将(1,2,@numOutReceive)三个数字传入存储过程
select@numOutReceive--再看变量就变成2了
--总结:

--Out是参数,传进、传出,缺一不可,在存储过程定义的时候一定要有out标识,
--在调用该存储过程的时候也要有out标识


--OutPut则是相当于存储过程的返回值
--不用传进,也不能传进
--它是在存储过程中定义,并且输出的

--一句话:Out相当于C#中的ref参数(传进、传出缺一不可),而且传进传出的时候都要标识为ref
--OutPut则为C#中的方法返回值类型,在方法定义时就已经定好了

‘拾’ sql中 return 与output 的区别

共同点:都返回值(但return只能返回int类型)
不同点:1.
output是定义变量是不是可以返回值
2.
output没有return从查询或过程中无条件退出的工功
3.
return返回值在函数和过程定义时不需要用output来定义