sqlserver存儲過程變數
加上引號
create proc insertTableNO(
@name varchar(50),
@manHour decimal,
@workTime datetime,
@wages decimal,
@insertTime datetime,
@tableName varchar(50)
)
as
begin
if object_id(@tableName) is not null
exec('insert into '+ @tablename+ ' ( name,manHour,workTime,wages,insertTime)
values('''散灶枝+@name+''','''+@manHour+''','辯神''+@workTime+''','''+@wages+'''沖敏,'''+@insertTime+''')')
else
return -1
end
㈡ sqlserver 存儲過程將查詢結果給變數
declare @name varchar(50)
select @name=name from Student where sid=@sid
--請注意升配,確保查吵模指詢出的數據是單行碼穗
㈢ SQLSERVER 存儲過程中 賦值時出錯 提示:必須聲明標量變數
存儲過程代碼也不貼出來,怎麼幫你分析呢?一般出現這種問題的原因是變數沒有事先定義就直接賦值,或者語法不對,用set還是select是有講塌培拿究的,建團搭議把代碼貼出來看中孝看
㈣ 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 存儲過程中的變數賦值
你差扮枯有存儲過虛洞程定義如下
create procere some_procere @var1 int,@var2 int
傳值時
exec some_procere 100,100或者缺灶
exec some_procere @var1=100,@var2=100
㈥ sql怎樣新建存儲過程
一:創建沒有參數的存儲過程:
CREATE PROCEDURE select_all
AS
BEGIN
SELECT * from T_login1
GO
二:創建帶參數的存儲過程:
CREATE PROCEDURE select_name
@id uniqueidentifier
AS
BEGIN
SELECT * from T_login1 where PSN0001A=@id
GO
(6)sqlserver存儲過程變數擴展閱讀:
創建存儲過程的注意事項:
1、保持事務簡短,事務越短,越不可能造成阻塞。
2、在事務中盡量避免使用循環while和游標,以及避免採用訪問大量行的語句。
3、在啟動事務前完成所有的計算和查詢等操作,避免同一事務中交錯讀取和更新。可以使用表變數預先存儲數據。即存儲過程中查詢與更新使用兩個事務實現。
4、超時會讓事務不執行回滾,超時後如果客戶端關閉連接sqlserver自動回滾事務。如果不關閉,將造成數據丟失,而其他事務將在這個未關閉的連接上執行,造成資源鎖定,甚至伺服器停止響應。
㈦ 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 存儲過程中變數賦值
你沒有把問題寫多明白啊不過看你得描述,應該是在 as後面聲明的局部變數。按你得用法絕對是沒有問題的,我試過沒問題啊。你說的「if @cc = 0這個判斷失效」是什麼意思呢?是表裡面有記錄自然@cc!=0,,「在判斷前面加select @cc的時候就可以」又是什麼意思?執行存儲過程的話,if只是判定條件只有select才會列印出數據~~~~~~~
㈨ 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中存儲過程變數使用
可以的,不過你剛才的數據敏核念類型表達錯誤:
修正的腳本如橋困下:
declare@aanumeric(10,2)
set@aa=111
declare@bbnumeric(10,2)
set氏基@bb=(@aa/2)
print@bb