1、定義變數與賦值
Declare @UserID --定義變數
Select @UserID=1 --賦值
Set @UserID=1
Select @UserID=UserID from tb_User where UserName='A' --這樣也是可以賦值的, 記得剛學SQL2000不知道這樣是可以
如下: 則通過變數,把值返回, 不需要另外建立表
Declare @UserID int, @UserName varchar(20)
Set @UserID=1
Set @UserName='AAA'
Select @UserID as UserID, @UserName as UserName
2、幾個系統函數的使用
@@error一般使用過事務的人就熟使用這個系統函數。 在@error<>0時, 交易回復。
@@RowCount影響的行數
@@Identity返回插入行主鍵的值
3、cast convert的用法
Convert: 時間的轉化時用得最多, 例如:Convert(varchar(10), getdate(),111)
Cast: 例如: cast(* as *), 當在改變表結構時, cast when then else end這樣的語句會起最大的作用
例:
/*
表UserDetails有欄位
UserID, Code, Type
2 C-1 Coo
2 M-1 Coo
2 D-1 Doo
3 C-1 Coo
3 M-1 Coo
3 H-1 Doo
需要把欄位變成 UserID, Code不同的值(有多少個就是多少個),值為Type, 如果是沒有的則留為空白
UserID C-1 M-1 D-1 H-1
2 Coo Coo Coo
3 Coo Coo Doo
*/
declare @sql varchar(500)
--首先需要選UserID
set @sql='select Userid '
/*
下面句尤其重要, 原理如下
既然要把code的不同值當標題, 首先要從表裡把code不同的值選出來 select distinct code from UserDetails 用集合temp來表示
然後通過cast來把Type的值賦到值裡面, 通過UserID來匯總
case when then else end這樣的文法就在這裡起好大的作用了
*/
select @sql= @sql + ', max(case code when ''' + code +''' then Type else '''' end) as ''' + code+''''
from (select distinct code from UserDetails) as Temp
set @sql= @sql +' from UserDetails group by Userid'
exec(@sql)
還有一種cast是搜尋型的, 也就是case後不運算式, 在when後面根有條件運算式:
select UserID, InsertTime, [type] = case when(datediff(day,InsertTime,getdate())>0) then 'Old' else 'New' end from UserDetails
小結: 現在多數的筆數都有一條這改變表結構的, 或許他們覺得能做出來才是SQL精通者, 然而我剛好認為這不, 因為好多人做不出來, 也不代表人家不精通, 因為這隻是SQL中cast的一個函數, 範圍太小了, 再加上是筆試, 好多人沒有真正的去調試過, 感覺現在能用紙與筆用做程式的人少了.