存儲過程表參數
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
也不知道你是不是這個意思