2016-01-15 110 views
-1

我正在創建一個名爲#PILOTTERR的臨時表。有超過40,000條記錄需要插入此表中。這需要約10分鐘才能執行。有沒有辦法讓這個更快?SQL Server創建的表運行緩慢

CREATE TABLE #PILOTTERR 
(
    Zip TEXT, 
    Office CHAR(4), 
    Branch NVARCHAR(33), 
    District NVARCHAR(37), 
    Region NVARCHAR(26), 
    SE_Territory NVARCHAR(42), 
    ISE_Territory NVARCHAR(43) 
); 

INSERT INTO #PILOTTERR 
VALUES ('00544','NY04','Long Island','New York-Long Island','US Northeast','SE-New York/Long Island-A','ISE-New York/Long Island-D') 

INSERT INTO #PILOTTERR 
VALUES ('01001','MA01','North Boston','North Boston','US Northeast','SE-North Boston-C','ISE-North Boston-B') 
    etc.... 
+2

爲什麼你使用TEXT數據類型的Zip。這似乎有點矯枉過正? –

+0

我不想將數據混淆爲除文本以外的任何內容。文本數據類型通常需要更長時間才能運行? – KDorn

+1

TEXT是一種depricated數據類型。所以我會避免使用它,與IMAGE一樣。 –

回答

2

試試這個辦法:

CREATE TABLE #PILOTTERR (
        Zip NVARCHAR(10), 
        Office CHAR(4), 
        Branch NVARCHAR(33), 
        District NVARCHAR(37), 
        Region NVARCHAR(26), 
        SE_Territory NVARCHAR(42), 
        ISE_Territory NVARCHAR(43) 
        ); 

,而不是做多INSERT INTO語句只有1:

INSERT INTO #PILOTTERR 
    VALUES (N'00544','NY04',N'Long Island',N'New York-Long Island',N'US Northeast',N'SE-New York/Long Island-A',N'ISE-New York/Long Island-D'), 
      (N'01001','MA01',N'North Boston',N'North Boston',N'US Northeast',N'SE-North Boston-C',N'ISE-North Boston-B'), 
     (etc..) 

如果你的數據類型NVARCHAR然後開始與N '' 引號通過這種方式,服務器不必執行從VARCHAR到NVARCHAR的轉換。

而且具有更小的明智的數據類型替換文本,如NVARCHAR(10),我想應該足夠了ZIPCODE

更重要的是,我在我的評論中提到,如果你是從Excel或CSV採購數據您可以使用SQL Server的導入數據嚮導。你可以找到更多關於它HERE

+0

我試着這樣做,但我得到這個錯誤:「Msg 102,Level 15,State 1,Line 2 ','。'附近的語法不正確。」是否有其他方法可以爲SQL Server 2012執行此操作?我看到的每個地方都提供瞭解決方案,但這不適合我。我甚至讓我的技術精明的朋友看着它,他們不知道爲什麼它不起作用。 – KDorn

+0

我也嘗試了一個簡單的表格。創建表#Number(一個整數);插入到#Number(一)值(1),(2)這返回相同的錯誤 – KDorn

+0

我剛剛運行的代碼,因爲它和它工作得很好。 –