數據庫相關之SQL Server(一)

11、高級查詢語句

1、  TRUNCATE TABLE [table_name]

刪除表中的所有行,而不記錄單個行刪除操作。

TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE DELETE 速度快,且使用的系統和事務日誌資源少。

DELETE 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。

新行標識所用的計數值重置爲該列的種子。如果想保留標識計數值,請改用 DELETE

對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由於 TRUNCATE TABLE 不記錄在日誌中,所以它不能激活觸發器。

2、  SP_DATABASES

返回在 sysdatabases 系統表中列出的數據庫。

sp_databases 在開放式數據庫連接 (ODBC) 中沒有等價的過程。

3、  SP_DATATYPE_INFO

    sp_datatype_info 等價於 ODBC 中的 SQLGetTypeInfo。返回結果按 DATA_TYPE 排序,再按數據類型映射爲相應 ODBC SQL 數據類型的緊密程度進行排序。

4、  SP_COLUMNS

       返回當前環境中可查詢的指定表或視圖的列信息。

           Sp_columns [table_name]

              Orsp_columns @table_name = '[table_name]', @column_name = '[column_name]'

5、  SP_TABLES

    用法同上,不再雷述。

12、存儲過程

       所有設計優良的 Microsoft® SQL Server™ 2000 應用程序都應當使用存儲過程。不論是否將應用程序的業務邏輯寫入存儲過程都應如此。甚至連沒有業務邏輯組件的標準 Transact-SQL 語句,在用參數打包成存儲過程後也能獲得性能收益。編譯進存儲過程的 Transact-SQL 語句在執行時可省去大量的處理。

121存儲過程的設計規則

l         CREATE PROCEDURE 定義本身可包括除下列 CREATE 語句以外的任何數量和類型的 SQL 語句,存儲過程中的任意地方都不能使用下列語句:

CREATE DEFAULT

CREATE TRIGGER

CREATE PROCEDURE

CREATE VIEW

CREATE RULE

 

l         存儲過程中參數的最大數目爲 2100。

l         可以在存儲過程內引用臨時表。

l         如果在存儲過程內創建本地臨時表,則該臨時表僅爲該存儲過程而存在;退出該存儲過程後,臨時表即會消失。

122創建存儲過程

示例:

CREATE PROCEDURE [PR_insert_casebrief_NEW]

@p_Casebrief_code as varchar(50),@p_Object_id as integer,@p_Spy_starttime as datetime,

@p_Spy_endtime as datetime,@p_Casebrief_id as integer out

as

insert into Case_brief_telecom(Casebrief_code,object_id,Spy_starttime,Spy_endtime,)

values(@p_Casebrief_code,@p_Object_id,@p_Spy_starttime,@p_Spy_endtime)

select @p_Casebrief_id = @@identity

GO

**** p_Casebrief_id爲該表的主鍵,自動增長。

l         Microsoft® SQL Server™ 2000 存儲過程以四種方式返回數據:

1、輸出參數,既可以返回數據(整型值或字符值等),也可以返回遊標變量(遊標是可以逐行檢索的結果集)。

2、返回代碼,始終是整型值。

3、SELECT 語句的結果集,這些語句包含在該存儲過程內或該存儲過程所調用的任何其它存儲過程內。

4、可從存儲過程外引用的全局遊標。

l         當一個存儲過程調用另一個存儲過程時,存儲過程就會嵌套。存儲過程最多可以嵌套 32 級。被調用存儲過程開始執行時,嵌套級數增加一級;被調用存儲過程完成執行時,嵌套級數減少一級。試圖超出 32 級的最高嵌套級數時,將導致整個存儲過程調用鏈的失敗。正在執行的存儲過程的當前嵌套級數存儲在 @@NESTLEVEL 函數中。

l         存儲過程中使用遊標:
 

CREATE procedure XG_Insert_XXX

as

 

declare @object_id as int

declare @CaseBriefID as varchar(4)

declare @number_style as varchar(50)

declare @strNumberType2 as varchar(50)

declare @number_code as varchar(50)

declare @strSQL as varchar(1000)

declare @strSQL1 as varchar(255)

declare @brief_code as varchar(50)

declare @creator as varchar(50)

declare @BH as varchar(50)

 

    DECLARE OBJECT_CURSOR CURSOR

    FOR SELECT distinct object_id,CaseBrief_ID,casebrief_code,table_creator from case_XXX

 

    OPEN OBJECT_CURSOR

    FETCH NEXT FROM OBJECT_CURSOR INTO @object_id,@CaseBriefID,@brief_code,@creator

    while (@@FETCH_STATUS = 0)

    BEGIN

        SELECT @BH=FullCode from View_user_depID where LoginName=''+@creator+''

        print @BH

        DECLARE NUMBER_CURSOR CURSOR

        FOR SELECT distinct number_style,number_code from case_XXX where object_id=@object_id

 

        OPEN NUMBER_CURSOR

        FETCH NEXT FROM NUMBER_CURSOR INTO @number_style,@number_code

        while (@@FETCH_STATUS = 0)

        BEGIN          

            set @strSQL='insert into CASE_XXX(CASEBRIEF_ID,NUM_TYPE,NUMBER) values(' + @CaseBriefID + ','''+ @number_style + ''',''' + @number_code + ''')'

            exec(@strSQL)

            FETCH NEXT FROM NUMBER_CURSOR INTO @number_style,@number_code

        END

        CLOSE NUMBER_CURSOR

        DEALLOCATE NUMBER_CURSOR

        FETCH NEXT FROM OBJECT_CURSOR INTO @object_id,@CaseBriefID,@brief_code,@creator

    END

    CLOSE OBJECT_CURSOR

    DEALLOCATE OBJECT_CURSOR

GO

發佈了30 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章