2016-01-15 112 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

我刚刚运行的代码,因为它和它工作得很好。 –