數組不能傳遞,變通的解決辦法是有的
思路如下:
1、將數組轉換為字元串格式(例如:a,b,c,d)
2、在資料庫內創建字元串分割為行的表值函數
3、若是需要將一個二維數組傳遞的話,需要將每列數據都格式化為1的方式,然後再用2的方式轉換為行,再將轉換後的數據組合為一個表
4、你就可以直接進行插入、編輯、刪除或查詢操作了。
㈡ sql server存儲過程的參數有哪些類型
針對
Transact-SQL
過程的准則:
所有
Transact-SQL
數據類型都可以用作參數。
您可以使用用戶定義的表類型創建表值參數。
表值參數只能是
INPUT
參數,並且這些參數必須帶有
READONLY
關鍵字。
cursor
數據類型只能是
OUTPUT
參數,並且必須帶有
VARYING
關鍵字。
針對
CLR
過程的准則:
在託管代碼中具有等效值的所有本機
SQL
Server
數據類型都可以用作參數。有關
CLR
類型與
SQL
Server
系統數據類型之間關系的詳細信息,請參閱
映射
CLR
參數數據。
表值或
cursor
數據類型不能用作參數。
如果參數的數據類型為
CLR
用戶定義類型,則必須對此類型有
EXECUTE
許可權。
㈢ sql server 中 一個要輸入參數和輸出參數的存儲過程。
1、首先我們需要打開SQL Server Managment管理工具,新建一個表。
㈣ SQLServer跨資料庫執行存儲,並且這個存儲帶有表類型參數,需要怎麼聲明傳入
參數定義
單個參數
1> CREATE PROCEDURE HelloWorld1
2> @UserName VARCHAR(10)
3> AS
4> BEGIN
5> PRINT 'Hello' + @UserName + '!';
6> END;
7> go
1> DECLARE @RC int;
2> EXECUTE @RC = HelloWorld1 'Edward' ;
3> PRINT @RC;
4> go
HelloEdward!
0
IN、OUT、IN OUT
註:
SQL Server 的 OUTPUT 需要寫在變數數據類型後面。
SQL Server 沒有 IN OUT 關鍵字
OUTPUT 已經相當於 IN OUT 了。
1> CREATE PROCEDURE HelloWorld2
2> @UserName VARCHAR(10),
3> @OutVal VARCHAR(10) OUTPUT,
4> @InoutVal VARCHAR(10) OUTPUT
5> AS
6> BEGIN
7> PRINT 'Hello ' + @UserName + @InoutVal + '!';
8> SET @OutVal = 'A';
9> SET @InoutVal = 'B';
10> END;
11> go
1>
2> DECLARE @RC int, @OutVal VARCHAR(10), @InoutVal VARCHAR(10);
3> BEGIN
4> SET @InoutVal = '~Hi~';
5> EXECUTE @RC = HelloWorld2 'Edward', @OutVal OUTPUT, @InoutVal OUTPUT;
6> PRINT @RC;
7> PRINT '@OutVal=' + @OutVal;
8> PRINT '@InoutVal=' + @InoutVal;
9> END
10> go
Hello Edward~Hi~!
0
@OutVal=A
@InoutVal=B
參數的默認值
1> CREATE PROCEDURE HelloWorld3
2> @UserName VARCHAR(10),
3> @Val1 VARCHAR(20) = ' Good Moning,',
4> @Val2 VARCHAR(20) = ' Nice to Meet you'
5> AS
6> BEGIN
7> PRINT 'Hello ' + @UserName + @Val1 + @Val2 + '!';
8> END;
9> go
1>
2> DECLARE @RC int;
3> BEGIN
4> EXECUTE @RC = HelloWorld3 'Edward';
5> PRINT @RC;
6> EXECUTE @RC = HelloWorld3 'Edward', ' Good Night,';
7> PRINT @RC;
8> EXECUTE @RC = HelloWorld3 'Edward', ' Good Night,', ' Bye';
9> PRINT @RC;
10> END
11> go
Hello Edward Good Moning, Nice to Meet you!
0
Hello Edward Good Night, Nice to Meet you!
0
Hello Edward Good Night, Bye!
0
指定參數名稱調用
此部分使用 「參數默認值」那一小節的存儲過程。
用於說明當最後2個參數是有默認的時候,如何跳過中間那個。
1> DECLARE @RC int;
2> BEGIN
3> EXECUTE @RC = HelloWorld3 'Edward';
4> PRINT @RC;
5> EXECUTE @RC = HelloWorld3 'Edward', @Val1=' Good Night,';
6> PRINT @RC;
7> EXECUTE @RC = HelloWorld3 'Edward', @Val1=' Good Night,', @Val2=' Bye';
8> PRINT @RC;
9> EXECUTE @RC = HelloWorld3 'Edward', @Val2=' HeiHei ';
10> PRINT @RC;
11> END
12> go
Hello Edward Good Moning, Nice to Meet you!
0
Hello Edward Good Night, Nice to Meet you!
0
Hello Edward Good Night, Bye!
0
Hello Edward Good Moning, HeiHei !
0
㈤ 如何給SQLSERVER存儲過程傳遞數組參數
確切的說不行-SQL SERVER沒有數組類型,ANSI SQL 92標准也不支持數組。但可用其它的方法來實現。 1. You could simulate an array by passing one or more varchar(255) fields with comma-separated values and then use a WHILE loop with PATINDEX and SUBSTR to extract the values. 1、你可以使用幾個VARCHAR(255)欄位來模擬數組,欄位中用逗號分開各個數據,然後使用循環和PATINDEX和SUBSTR分開這些數據。 2. The more usual way to do this would be to populate a temporary table with the values you need and then use the contents of that table from within the stored-procere. Example of this below2、通常這種方法需要為這些數據創建一個臨時表,然後在存儲過程使用表中的內容。如下例create procere mytest @MyParmTempTable varchar(30)asbegin-- @MyParmTempTable contains my parameter list... 這個變數是包含參數的表名-- For simplicity use dynamic sql to into a normal temp table... create table #MyInternalList ( list_item varchar( 2 ) not null)set nocount oninsert #MyInternalList select * from sysobjects create table #MyList ( list_item varchar( 2 ) not null)insert #MyList values ( 'S' ) insert #MyList values ( 'U' ) insert #MyList values ( 'P' )exec mytest "#MyList"3. If all you wanted to do was use the array/list as input to an IN clause in a WHERE statement you could use :-3、如果你想在IN子句里使用輸入的數組參數可以這樣做:CREATE PROCEDURE sp_MyProcere (@MyCommaDelimitedString
㈥ sql server 中 一個要輸入參數和輸出參數的存儲過程。
第一步:點擊資料庫下的「可編程性」,選擇「存儲過程」,點擊滑鼠右鍵,選擇「新建存儲過程」
第二步:在create
PROCEDURE
後輸入存儲過程的名字,緊跟著的就是定義存儲過程的參數,接下來就可以去編寫自己所需要組裝的存儲過程語句了
注意,怕寫的不對,可以執行下,想驗證sql語句是否正確,就使用print輸出下
第三步:點擊上面的執行,存儲過程就寫好了,要怎麼調用呢,在sqlserver的語句查詢框中,輸入exec
存儲過程名
參數,執行就可以了。
㈦ sqlserver存儲過程如何建立可選參數
SQL Server 中的存儲過程(Procere),帶入參數和出參數。
存儲過程(Procere)-基本創建與操作。
--一、無參存儲過程
create procere PTitles
as
select * from titles
go
--2,執行存儲過程
execute PTitles
go
--3,移除存儲過程
--drop procere PTitles
go
5.存儲過程(Procere)-帶入參。
create proc P_Titles_ByType
@type char(12) --入參
as
select * from titles where type=@type
go
--,執行帶參數的存儲過程
--a)方式一
exec P_Titles_ByType @type='business'
go
--b)方式二
exec P_Titles_ByType 'business'
6.存儲過程(Procere)-帶入參和出參。
create proc P_Titles_ByTypeAndPrice
@type char(12), --入參
@price money --入參
as begin
select * from titles
where type=@type and price>@price
end
㈧ SQL Server 帶參數的存儲過程
SQL
Server-存儲過程(Procere),帶入參數和出參數
http://www.cnblogs.com/ylbtech/archive/2012/08/14/2638257.html
上面有教程,自己參考下使用。
㈨ 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可以看到數據已經插入了。
㈩ 如何在sqlserver存儲過程中輸出參數,語句是什麼,我不用輸出參數,我只是在體內輸出語句,請問是什麼
在定義時定義一個ouput參數,如以下存儲過程根據時間產生一個唯一ID
CREATE PROCEDURE [getid](@id char(17) OUTPUT)--產生唯一碼
AS
DECLARE @a datetime
select @a=getdate()
DECLARE @time1 char(10)
DECLARE @time2 char(10)
DECLARE @time3 char(10)
DECLARE @time4 char(10)
DECLARE @time5 char(10)
DECLARE @time6 char(10)
DECLARE @time7 char(10)
Select @time1=str(Datename(year,@a))
Select @time2=str(Datename(month,@a))
if Datename(month,@a)<10 select @time2='0'+rtrim(ltrim(@time2))
Select @time3=str(Datename(day,@a))
if Datename(day,@a)<10 select @time3='0'+rtrim(ltrim(@time3))
select @time4=str(Datename(hour,@a))
if Datename(hour,@a)<10 select @time4='0'+rtrim(ltrim(@time4))
Select @time5=str(Datename(minute,@a))
if Datename(minute,@a)<10 select @time5='0'+rtrim(ltrim(@time5))
Select @time6=str(Datename(second,@a))
if Datename(second,@a)<10 select @time6='0'+rtrim(ltrim(@time6))
Select @time7=str(Datename(Millisecond,@a))
if Datename(Millisecond,@a)<10 select @time7='0'+rtrim(ltrim(@time7))
if Datename(Millisecond,@a)<100 select @time7='0'+rtrim(ltrim(@time7))
select @id=ltrim(rtrim(@time1))+ltrim(rtrim(@time2))+ltrim(rtrim(@time3))+ltrim(rtrim(@time4))+ltrim(rtrim(@time5))+ltrim(rtrim(@time6))+ltrim(rtrim(@time7))
GO
在其它存儲過程中用下例語句調用以上這個存儲過程,如下
DECLARE @id char(17)
EXEC [getid] @id OUTPUT
這樣@id就可以得到getid的返回值了