存储过程表参数
A. 存储过程如何进行参数的判断
create proc Mypc @bool varchar(100)
as
if(@bool='A')
Select A.....查询
else if(@bool='B')
Select B.......查询
--如果楼主是想将参数作为表名可以:
create proc Mypc @tname nvarchar(100)
as
declare @sql nvarchar(4000)
begin
set @sql='select * from '+@tname+' where id=1'
exec (@sql)
end
B. 存储过程:带参数类型有哪些
有in,out,inout
in:表示参数从外部传入到里面使用(过程内部使用),可以是直接数据也可以是保存数据的变量
out:表示参数是从过程里面吧数据保存到变量中,交给外部使用,传入的必须的变量
inout:数据可以从外部传入到过程内部使用,同时内部操作之后,又会将数据返还给外部
C. SQL Server存储过程中使用表值作为输入参数示例
在2008之前如果我们想要将表作为输入参数传递给SQL
Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入。
在2008中提供了表值参数。使用表值参数,可以不必创建临时表或许多参数,即可向
Transact-SQL
语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码。这样的操作对于存储过程内基于表函数的操作变得非常容易操作。
表值参数是使用用户定义的表类型来声明的。所以使用之前要先定义表类型。
/*
创建表类型.*/
CREATE
TYPE
LocationTableType
AS
TABLE
(
LocationName
VARCHAR(50)
,
CostRate
INT
);
GO
/*
创建一个存储过程以表值参数作为输入.
*/
CREATE
PROCEDURE
dbo.
usp_InsertProctionLocation
@TVP
LocationTableType
READONLY
AS
SET
NOCOUNT
ON
INSERT
INTO
Proction.Location
(Name
,CostRate
,Availability
,ModifiedDate)
SELECT
*,
0,
GETDATE()
FROM
@TVP;
GO
/*
声明表值参数变量.*/
DECLARE
@LocationTVP
ASLocationTableType;
/*
将数据插入表值变量*/
INSERT
INTO
@LocationTVP(LocationName,
CostRate)
SELECT
Name,
0.00
FROM
Person.StateProvince;
/*
将变量传递给存储过程*/
EXEC
usp_InsertProctionLocation@LocationTVP;
GO
查询表Proction.Location可以看到数据已经插入了。
D. 带参数的存储过程如何去写谁给举个例子
写带有参数存储过程应该是sql数据库的问题:
先建立一个表,并添加一些数据来进行演示:
create
table
t_student(
id
int
not
null,
name
nvarchar
(10)
null,
age
tinyint
null,
school
nvarchar(20)
null,
class
nvarchar(10)
null,
score
float
null,
constraint
[pk_student_id]
primary
key
clustered(id)
)
go
insert
into
t_student
values(1,'张小红',8,'育才小学','一班',92)
insert
into
t_student
values(2,'王丽丽',8,'育才小学','一班',90)
insert
into
t_student
values(3,'张燕',7,'云华小学','二班',86)
insert
into
t_student
values(4,'刘华',6,'云华小学','二班',85)
一、exec
exec命令可以执行一个存储过程也可以执行一个动态sql语句。先来看看怎么执行存储过程:
新建一个存储过程
sp_getstudent
,返回
成绩大于90
分的学生:
create
procere
[dbo].[sp_getstudent]
@score
float,
@nums
int
output
as
begin
set
nocount
on;
select
*
from
t_student
where
score
>=@score
select
@nums=count(1)
from
t_student
where
score
>=@score
if(@nums>0)
return
1
else
return
0
end
go
该存储过程涉及了
查询操作、返回值和输出参数,我们来看用exec
命令如何调用:
declare
@return_value
int,
@outnums
int
exec
@return_value
=
[dbo].[sp_getstudent]
@score
=
90,
@nums
=
@outnums
output
select
@outnums
as
n'大于90分的人数'
select
'返回值'
=
@return_value
go
执行结果:
我们发现exec
执行存储过程和我们平时程序执行一个方法是几乎一样的,返回值参数
直接就可以等于存储过程的执行后的返回值,输出参数
在后面需要增加
output
关键字。
E. 存储过程参数输入和输出参数有什么作用
无论是输入的参数还是输出的参数,在此过程中都视为一个参数,所以一般情况下对应你定义的参数类型和个数带入,便可调用。
存储过程后面的是参数列表,其实存储过程就是个方法,通过传递参数来指导方法完成。输出参数相当于返回值,会带output关键字。
其它参数要提前赋值,而output不需要提前赋值,只需要提供一个变量,在存储过程执行完的时候,output类型的变量值就会修改,获得返回值,只能通过这个方法获得返回值,而不能像函数一样直接返回结果。因为存储过程是没有返回值的。
(5)存储过程表参数扩展阅读
1、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2、当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3、存储过程可以重复使用,可减少数据库开发人员的工作量。
4、安全性高,可设定只有某些用户才具有对指定存储过程的使用权。
F. 关于给SQL存储过程表名作为参数的问题
定义 一个变量
DECLARE @sql Varchar(max)
set @sql= 'SELECT * FROM' +@TableName+ 'where Row between' + @startRecordIndex +'and'+ @endRecordIndex
--最后再
exec @sql
纯页面手打,也不知道有没有格式上错误,但意思已经表达的很清楚了
ALTER procere [dbo].[P_Pro_Women]
(@startRecordIndex int,
@endRecordIndex int,
@TableName varchar(50),
@BrandId int,
@sql Varchar(max))
as
begin
set @sql='SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ProctId desc)AS Row, * from '+@TableName +' where brandid ='+@BrandId+') where Row between '+ @startRecordIndex+' and '+@endRecordIndex
exec @sql
end
也不知道你是不是这个意思