資料庫相關之SQL Server(一)

來源:互聯網
上載者:User
server|資料|資料庫 1.1、進階查詢語句
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]

              Or:sp_columns @table_name = '[table_name]', @column_name = '[column_name]'

5、  SP_TABLES

    用法同上,不再雷述。
1.2、預存程序
       所有設計優良的 Microsoft® SQL Server™ 2000 應用程式都應當使用預存程序。不論是否將應用程式的商務邏輯寫入預存程序都應如此。甚至連沒有商務邏輯組件的標準 Transact-SQL 陳述式,在用參數打包成預存程序後也能獲得效能收益。編譯進預存程序的 Transact-SQL 陳述式在執行時可省去大量的處理。
1.2.1預存程序的設計規則
l         CREATE PROCEDURE 定義本身可包括除下列 CREATE 語句以外的任何數量和類型的 SQL 陳述式,預存程序中的任意地方都不能使用下列語句:

CREATE DEFAULT

CREATE TRIGGER

CREATE PROCEDURE

CREATE VIEW

CREATE RULE

 

l         預存程序中參數的最大數目為 2100。

l         可以在預存程序內引用暫存資料表。

l         如果在預存程序內建立本地暫存資料表,則該暫存資料表僅為該預存程序而存在;退出該預存程序後,暫存資料表即會消失。
1.2.2建立預存程序
樣本:

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




相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。