當前位置:首頁 » 存儲配置 » sqlserver存儲過程表變數

sqlserver存儲過程表變數

發布時間: 2022-06-06 02:24:34

sqlSERVER存儲過程中修改表 要怎麼做

create procere 把考號分配給2個班的學號最小的前5位同學
as
BEGIN

;WITH cte AS
(
SELECT rn=ROW_NUMBER()OVER(ORDER BY GETDATE()) ,* FROM EXAM
),
stuu1 AS
(
SELECT rn=ROW_NUMBER()OVER(ORDER BY stuid) ,* FROM stu WHERE clazz='1班';
),
stuu2 AS
(
SELECT rn=ROW_NUMBER()OVER(ORDER BY stuid)+5 ,* FROM stu WHERE clazz='2班';
),
stuu AS
(
SELECT * FROM stuu1
UNION ALL
SELECT * FROM stuu2
)

UPDATE c
SET c.stuID = s.stuID
FROM cte c JOIN stuu s ON c.rn=s.rn

end

Ⅱ sqlserver怎麼創建存儲過程

1、可視化創建

a.登錄SQL Server

b.打開資料庫==》要創建存儲過程的資料庫==》可編程性==》存儲過程

c.選中「存儲過程」右擊 ,在系出現的對話框中選擇「新建存儲過程」

d.在右側出現的對話框中填寫具體存儲過程內容完成後執行即可

2、代碼創建

a.全手寫代碼

一、定義變數
--簡單賦值
declare@aint
set@a=5
print@a

--使用select語句賦值
declare@user1nvarchar(50)
select@user1='張三'
print@user1
declare@user2nvarchar(50)
select@user2=NamefromST_UserwhereID=1
print@user2

--使用update語句賦值
declare@user3nvarchar(50)
updateST_Userset@user3=NamewhereID=1
print@user3


二、表、臨時表、表變數

--創建臨時表1
createtable#DU_User1
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL
);
--向臨時表1插入一條記錄
insertinto#DU_User1(ID,Oid,[Login],Rtx,Name,[Password],State)values(100,2,'LS','0000','臨時','321','特殊');

--從ST_User查詢數據,填充至新生成的臨時表
select*into#DU_User2fromST_UserwhereID<8

--查詢並聯合兩臨時表
select*from#DU_User2whereID<3unionselect*from#DU_User1

--刪除兩臨時表
droptable#DU_User1
droptable#DU_User2

--創建臨時表
CREATETABLE#t
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL,
)

--將查詢結果集(多條數據)插入臨時表
insertinto#tselect*fromST_User
--不能這樣插入
--select*into#tfromdbo.ST_User

--添加一列,為int型自增長子段
altertable#tadd[myid]intNOTNULLIDENTITY(1,1)
--添加一列,默認填充全球唯一標識
altertable#tadd[myid1](newid())

select*from#t
droptable#t
--給查詢結果集增加自增長列

--無主鍵時:
selectIDENTITY(int,1,1)asID,Name,[Login],[Password]into#tfromST_User
select*from#t

--有主鍵時:
select(selectSUM(1)fromST_UserwhereID<=a.ID)asmyID,*fromST_UseraorderbymyID
--定義表變數
declare@ttable
(
idintnotnull,
msgnvarchar(50)null
)
insertinto@tvalues(1,'1')
insertinto@tvalues(2,'2')
select*from@t
三、循環

--while循環計算1到100的和
declare@aint
declare@sumint
set@a=1
set@sum=0
while@a<=100
begin
set@sum+=@a
set@a+=1
end
print@sum
四、條件語句

--if,else條件分支
if(1+1=2)
begin
print'對'
end
else
begin
print'錯'
end

--whenthen條件分支
declare@todayint
declare@weeknvarchar(3)
set@today=3
set@week=case
when@today=1then'星期一'
when@today=2then'星期二'
when@today=3then'星期三'
when@today=4then'星期四'
when@today=5then'星期五'
when@today=6then'星期六'
when@today=7then'星期日'
else'值錯誤'
end
print@week


五、游標

declare@IDint
declare@Oidint
declare@Loginvarchar(50)

--定義一個游標
declareuser_curcursorforselectID,Oid,[Login]fromST_User
--打開游標
openuser_cur
while@@fetch_status=0
begin
--讀取游標
fetchnextfromuser_curinto@ID,@Oid,@Login
print@ID
--print@Login
end
closeuser_cur
--摧毀游標
deallocateuser_cur
六、觸發器

觸發器中的臨時表:

Inserted
存放進行insert和update操作後的數據
Deleted
存放進行delete和update操作前的數據

--創建觸發器
CreatetriggerUser_OnUpdate
OnST_User
forUpdate
As
declare@msgnvarchar(50)
--@msg記錄修改情況
select@msg=N'姓名從「'+Deleted.Name+N'」修改為「'+Inserted.Name+'」'fromInserted,Deleted
--插入日誌表
insertinto[LOG](MSG)values(@msg)

--刪除觸發器
droptriggerUser_OnUpdate
七、存儲過程

--創建帶output參數的存儲過程
CREATEPROCEDUREPR_Sum
@aint,
@bint,
@sumintoutput
AS
BEGIN
set@sum=@a+@b
END

--創建Return返回值存儲過程
CREATEPROCEDUREPR_Sum2
@aint,
@bint
AS
BEGIN
Return@a+@b
END

--執行存儲過程獲取output型返回值
declare@mysumint
executePR_Sum1,2,@mysumoutput
print@mysum

--執行存儲過程獲取Return型返回值
declare@mysum2int
execute@mysum2=PR_Sum21,2
print@mysum2八、自定義函數

函數的分類:

1)標量值函數

2)表值函數

a:內聯表值函數

b:多語句表值函數

3)系統函數--新建標量值函數
createfunctionFUNC_Sum1
(
@aint,
@bint
)
returnsint
as
begin
return@a+@b
end

--新建內聯表值函數
createfunctionFUNC_UserTab_1
(
@myIdint
)
returnstable
as
return(select*fromST_UserwhereID<@myId)

--新建多語句表值函數
createfunctionFUNC_UserTab_2
(
@myIdint
)
returns@ttable
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL
)
as
begin
insertinto@tselect*fromST_UserwhereID<@myId
return
end

--調用表值函數
select*fromdbo.FUNC_UserTab_1(15)
--調用標量值函數
declare@sint
set@s=dbo.FUNC_Sum1(100,50)
print@s

--刪除標量值函數
dropfunctionFUNC_Sum1
談談自定義函數與存儲過程的區別:

一、自定義函數:

1.可以返回表變數

2.限制頗多,包括

不能使用output參數;

不能用臨時表;

函數內部的操作不能影響到外部環境;

不能通過select返回結果集;

不能update,delete,資料庫表;

3.必須return一個標量值或表變數

自定義函數一般用在復用度高,功能簡單單一,爭對性強的地方。

二、存儲過程

1.不能返回表變數

2.限制少,可以執行對資料庫表的操作,可以返回數據集

3.可以return一個標量值,也可以省略return

存儲過程一般用在實現復雜的功能,數據操縱方面。

Ⅲ sqlserver 存儲過程中變數賦值

你沒有把問題寫多明白啊不過看你得描述,應該是在 as後面聲明的局部變數。按你得用法絕對是沒有問題的,我試過沒問題啊。你說的「if @cc = 0這個判斷失效」是什麼意思呢?是表裡面有記錄自然@cc!=0,,「在判斷前面加select @cc的時候就可以」又是什麼意思?執行存儲過程的話,if只是判定條件只有select才會列印出數據~~~~~~~

Ⅳ sqlserver存儲過程中 如何把表變數轉換成數值

直接將表名也改為varchar(50) 就行了
要不你就用預執行

if exists(select * from sysobjects where name='proc_select')
drop proc proc_select
go
create proc proc_select
@table varchar(50)
as
declare @sql varchar(8000)
set @sql='select * from '+@table
exec(@sql)
go

exec proc_select 'Types'

Ⅳ sqlserver存儲過程: Exec(@變數)在一個存儲過程中調用如何有參數返回變數查詢值

create proc proc_find_count13
@column_name varchar(20)
,@term varchar(20)
as
declare @sel varchar(500)
SET @sel='declare @count int ;set @count=(select count(*) from proct where ' + @column_name + ' like ''%'+@term+'%''); print @count;'
EXECute (@sel)
go
exec proc_find_count13 'p_name','c'

Ⅵ SqlServer存儲過程

create
procere
prCreateSubPlan
as
begin
declare
@id
int,
@intCycle
int,
@planName
varchar(100),
@createTime
smalldatetime,
@cycleTime
int
select
@id
=
min(t_cplan_id)
from
t_cplan
while
(@id
is
not
null)
begin
select
@planName=t_plan_name,
@createTime
=
createTime,
@cycleTime
=
cycleTime
from
t_cplan
where
t_cplan_id=@id
select
@intCycle=
0
while
(@intCycle<@cycleTime)
begin
--
表t_plan
列t_plan_id是IDENTITY

insert
t_plan
(t_plan_name,
t_cplan_id,
createTime)
values
(@planName,
@id,
dateadd(day,
@intCycle,
@createTime))
select
@intCycle
=
@intCycle
+
1
end
select
@id
=
min(t_cplan_id)
from
t_cplan
where
t_cplan_id>@id
end
end
go

Ⅶ 有關於sqlserver的存儲過程的問題:@xxx 和 declare @xxx有什麼不同

@xxx 和 declare @xxx有什麼不同?
前者是在已經定義的情況下使用,後者是定義。
【有疑問可以HI我,或追問,但請不要關閉問題,謝謝!】
PS:
SQL Server中定義變數的方法:
全局變數 DECLARE @@變數名 類型
局部變數 DECLARE @變數名 類型

賦值方式:

--一. SET賦值
DECLARE @Name varchar(50),@@Name varchar(50)
SET @Name='局部張三'
SET @@Name='全局張三'
SELECT @@Name+' '+@Name
--二. SELECT 賦值
DECLARE @Name varchar(50),@@Name varchar(50)
SELECT @Name='局部張三',@@Name='全局張三'
SELECT @@Name+' '+@Name

--順便說下

--1.變數的作用域是有限的
--2.進行變數操作,需初始化
DECLARE @Name varchar(50)
--SET @Name=''
SET @Name = @Name+'張三'
SELECT @Name --結果將為NULL
--3.變數也是存在表變數,表變數與物理表存在一定區別

熱點內容
android音樂波形圖 發布:2024-11-15 11:57:12 瀏覽:378
福建社保銀行卡初始密碼是多少 發布:2024-11-15 11:47:40 瀏覽:911
游戲多開用什麼配置 發布:2024-11-15 11:46:51 瀏覽:729
管理java版本 發布:2024-11-15 11:44:03 瀏覽:629
ndk編譯的程序如何執行 發布:2024-11-15 11:43:18 瀏覽:626
輕應用伺服器適合搭建網站嗎 發布:2024-11-15 11:36:08 瀏覽:246
c語言的百分號 發布:2024-11-15 11:34:24 瀏覽:31
一加五安卓8什麼時候推送 發布:2024-11-15 11:19:40 瀏覽:854
暗影騎士擎有哪些配置 發布:2024-11-15 11:13:46 瀏覽:598
方舟主機專用伺服器是什麼意思 發布:2024-11-15 11:12:23 瀏覽:8