1.exec的用法
(1).執行存儲過程:exec 存儲過程名 參數
1 exec myprocdure @code="Z0001" 3 exec myprocdure '2019/01/01','2019/10/01','Z0001'
(2).動態執行sql語句:用圓括號(),不能帶輸入,輸出參數
1 exec ( 'Insert #exl( code ) Select code From excode ')
2.sql中游標的使用
游標是一種處理數據的方法,主要用於存儲過程,觸發器和T-SQL語句中,他們的結果集可用於其他的T-SQL語句。可以查看或處理結果集中向前或向后瀏覽數據的功能。
1.游標可以從多條數據的結果集中每次提取一條數據
2.可以對select返回的結果集中每次執行相同或不同的操作
3.保存查詢結果。方便以后使用 ,游標的結果由select語句產生,如果處理過程需要重復使用一個記錄集,那么創建一次游標而重復使用若干次,比重復查詢數據庫要快的多。
游標主要包括結果集和游標位置兩部分,游標結果集是定義游標的select語句返回的行集合,游標位置是指向這個結果集中的某一行的指針,因此,若要對結果集進行逐條單獨處理時,需聲明一個指向該結果集中的游標變量
1.游標變量的聲明:declare @cursor cursor 2.聲明游標:declare 游標名 cursor 3.創建游標:declare 游標名 cursor for select 語句 4.fetch next from 游標名 into 游標變量 -- 將游標向下移一行,將獲取到的數據放入之前定義的游標變量中 5.while @@fetch_status=0 -- 判斷fetch語句是否執行成功 6.關閉游標:close 游標名 7.釋放游標:deallocate 游標名
1 fetch next from namecursor into @cursor 2 while @@ @@fetch_status = 0 3 BEGIN 4 sql語句 5 fetch next from namecursor into @cursor 6 END 7 8 -- 注意: 用兩次 “FETCH NEXT FROM ” 是因為,第一次只是用來判斷 @@FETCH_STATUS的,后面一次 “FETCH NEXT FROM ” 才是 loop用到的,也就是后面一次 是在 BEGIN END之間,是被反復執行的。每次讀取一行。