none
建立#TempTable與Declare @TempTable有何差別

    問題

  • 各位好,最近在做資料庫昇級,正在整理一些可能且不了解的問題點,求教各位

    於StoreProcedure中建立暫存表格有以下兩種方法,請問有何差別

    方法一
    Create Table #TempTable(
    FirstName varchar(20),
    LastName varchar(20)
    )

    方法二
    DECLARE @TmpTable TABLE (
    FirstName varchar(20),
    LastName varchar(20)
    )

    另外, 原先Sql2000中的資料庫預設定序為不分大小寫,若將資料庫昇級至2005之中
    且2005的定序已區分大小寫時,那以上的寫法會不會有影響(因為tempdb的定序為區分大小寫)
    是否須修改原先StoreProcedure中的程式,於建立暫存表格時,須加上collate的語法呢

    2006年11月17日 上午 02:11

解答

  •  Nelson.Cheng 寫信:
    方法一
    Create Table #TempTable(
    FirstName varchar(20),
    LastName varchar(20)
    )

    方法二
    DECLARE @TmpTable TABLE (
    FirstName varchar(20),
    LastName varchar(20)
    )

    您好:
    方法一是建立一個區域性的暫存資料表(Local ),簡單地說,就是在 tempdb 資料庫中,建立一個名稱為 #TempTabel 的資料表(位於暫存資料表中),這個暫存資料表只有建立者可以使用,其他人可以看到,但無法存取。除非利用 DROP TABLE 來明確卸除暫存資料表,否則當建立該暫存資料表的連線結束時,SQL Server 會自動將其刪除。

    而方法二則是建立一個 table 資料型別的暫存資料表,它是存在記憶體中的。因此其他人無法看到,此外當定義 table 資料型別的函數、預存程序或批次結束時,就會自動清除這個暫存資料表。

     Nelson.Cheng 寫信:
    原先Sql2000中的資料庫預設定序為不分大小寫,若將資料庫昇級至2005之中
    且2005的定序已區分大小寫時,那以上的寫法會不會有影響(因為tempdb的定序為區分大小寫)
    是否須修改原先StoreProcedure中的程式,於建立暫存表格時,須加上collate的語法呢
    如果您原本的 SP 程式的變數大小寫一致時,就可以不用加上 collate 陳述式。

    2006年11月17日 上午 03:46
    版主

所有回覆

  •  Nelson.Cheng 寫信:
    方法一
    Create Table #TempTable(
    FirstName varchar(20),
    LastName varchar(20)
    )

    方法二
    DECLARE @TmpTable TABLE (
    FirstName varchar(20),
    LastName varchar(20)
    )

    您好:
    方法一是建立一個區域性的暫存資料表(Local ),簡單地說,就是在 tempdb 資料庫中,建立一個名稱為 #TempTabel 的資料表(位於暫存資料表中),這個暫存資料表只有建立者可以使用,其他人可以看到,但無法存取。除非利用 DROP TABLE 來明確卸除暫存資料表,否則當建立該暫存資料表的連線結束時,SQL Server 會自動將其刪除。

    而方法二則是建立一個 table 資料型別的暫存資料表,它是存在記憶體中的。因此其他人無法看到,此外當定義 table 資料型別的函數、預存程序或批次結束時,就會自動清除這個暫存資料表。

     Nelson.Cheng 寫信:
    原先Sql2000中的資料庫預設定序為不分大小寫,若將資料庫昇級至2005之中
    且2005的定序已區分大小寫時,那以上的寫法會不會有影響(因為tempdb的定序為區分大小寫)
    是否須修改原先StoreProcedure中的程式,於建立暫存表格時,須加上collate的語法呢
    如果您原本的 SP 程式的變數大小寫一致時,就可以不用加上 collate 陳述式。

    2006年11月17日 上午 03:46
    版主
  • 方法一是建立一個區域性的暫存資料表(Local ),簡單地說,就是在 tempdb 資料庫中,建立一個名稱為 #TempTabel 的資料表(位於暫存資料表中),這個暫存資料表只有建立者可以使用,其他人可以看到,但無法存取(其他人應該也是看不到,因為不同連線)。除非利用 DROP TABLE 來明確卸除暫存資料表,否則當建立該暫存資料表的連線結束時,SQL Server 會自動將其刪除。

    就WEB程式而言,請問哪一種方式,效能較好???謝謝!
    2008年10月8日 上午 09:25
  • 不定義Collate時,采用的默認數據庫排序
    新建數據庫采用實例的排序
    2008年10月8日 上午 09:43
  • 就WEB程式而言,請問哪一種方式,效能較好???謝謝!
    一個位於暫存資料表中,另外一個是存在記憶體中 前者需要用到 DISK I/O,後者不需要 DISK I/O 

    2008年10月8日 上午 10:05
    版主
  • Table parameter works fine for small dataset while temp table performs better for large dataset.

    2008年10月8日 下午 05:39