上一篇我們講到了SQL存儲過程的基本定義,怎么創建,使用,這篇就來講一下變量的使用。
變量分文局部變量和全局變量
局部變量是@開頭,全局變量是@@開頭,這里我們主要講局部變量,全局變量我們后面再講。
在c# 語言中,定義一個變量很簡單,例如
在sql中,定義一個變量需要關鍵字DECLARE,還需要個特殊符號標記(@)表示是變量。
看看簡單的聲明語法:
@Local_Var是一個整體,表示一個變量。
data_type就是數據類型了,這個大家都很熟悉的,例如int,decimal ,float,text等。
變量聲明了,怎么賦值呢,能在聲明的時候賦值么?像這樣
一,基本用法
查看結果
-------------    
然后我們看看變量的運算,運算其實很簡單,下面看看加減法
結果
-----------
  3
  4
  6
  -5
結果
-----------
  3
  6
  3
  9
結果
---------
1,表達式返回多個值時
declare @name varchar(128)
set @name=(select username from userinfo)
print @name
/*
--出錯信息為
服務器: 消息 512,級別 16,狀態 1,行 2
子查詢返回的值多于一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之后,或子查詢用作表達式時,這種情況是不允許的。
*/
表達式返回多個值時,使用 SELECT 賦值
declare @name varchar(20)
select @name= username from userinfo
print @name --結果集中最后一個 username 列的值
結果: 
---------
wangwu
2,表達式未返回值時
結果
--------
--表達式未返回值時,使用 SELECT 賦值
declare @name varchar(20)
set @name='jack'
select @name=username from userinfo where username='not'
print @name  --jack,保存原來的值
結果
-------
jack
下表列出 SET 與 SELECT 的區別。
下面來看個綜合的例子
AS
--這里來定義一個變量來保存密碼
Declare @strPwd varchar(20)  
BEGIN
    select @strPwd=userPass from userinfo where userName=@name  --通過select 給變量@strPwd賦值
    if(@password=@strPwd)
        begin
            set @inReturn=1
             --假設來更新個時間
             update userinfo set registertime=getdate() where userName=@name
         end
    else
    set @inReturn=-1   --如果密碼不正確,返回-1
END
GO
--測試方法
declare @test int
exec UserLogin1 'admin','admin',@test output  --這里如果沒有output關鍵字,則@test的值為NULL
print @test
結果:
-------------
  (1 行受影響)
  1
--或這樣調用:
declare @test int
EXEC UserLogin1 @name='admin',@password='admin',@inReturn=@test output
print @test
--結果跟上面是一樣的
--如果我們登錄不正確,像這樣
declare @test int
EXEC UserLogin1 @name='admin1',@password='admin',@inReturn=@test output
print @test     結果
-------------
 -1             --這里的值是存儲過程中設置的值。如果失敗,則返回-1,這就是output的作用。
新聞熱點
疑難解答