SQL Server中的sp_table选项

SQL Server中的sp_table选项,sql,sql-server,bulkinsert,Sql,Sql Server,Bulkinsert,我想知道为SQLServer2005/2008设置“大容量加载时的表锁”的sp_table选项的利弊?我的场景是,我有3个处理数据库的线程,一个查询线程,一个批量插入线程和一个删除线程 以下是sp_tableoption的MSDN相关链接 提前感谢,, 乔治只需在批量插入中执行即可 例子 将锁定表的大容量插入 BULK INSERT Northwind.dbo.[ORDER Details] FROM 'f:\orders\lineitem.tbl' WITH (

我想知道为SQLServer2005/2008设置“大容量加载时的表锁”的sp_table选项的利弊?我的场景是,我有3个处理数据库的线程,一个查询线程,一个批量插入线程和一个删除线程

以下是sp_tableoption的MSDN相关链接

提前感谢,,
乔治

只需在批量插入中执行即可

例子

将锁定表的大容量插入

BULK INSERT Northwind.dbo.[ORDER Details]
   FROM 'f:\orders\lineitem.tbl'
   WITH
     (
        FIELDTERMINATOR = '|',
        ROWTERMINATOR = ':\n',
        FIRE_TRIGGERS,
        TABLOCK  --this is it
      )
BULK INSERT Northwind.dbo.[ORDER Details]
       FROM 'f:\orders\lineitem.tbl'
       WITH
         (
            FIELDTERMINATOR = '|',
            ROWTERMINATOR = ':\n',
            FIRE_TRIGGERS
          )
此语句不会锁定表

BULK INSERT Northwind.dbo.[ORDER Details]
   FROM 'f:\orders\lineitem.tbl'
   WITH
     (
        FIELDTERMINATOR = '|',
        ROWTERMINATOR = ':\n',
        FIRE_TRIGGERS,
        TABLOCK  --this is it
      )
BULK INSERT Northwind.dbo.[ORDER Details]
       FROM 'f:\orders\lineitem.tbl'
       WITH
         (
            FIELDTERMINATOR = '|',
            ROWTERMINATOR = ':\n',
            FIRE_TRIGGERS
          )
通过使用-h(用于提示)开关和“tablock”使用tablock进行BCP

您可以从SSI或DTS中进行大容量插入,然后插入到那里的表锁中

例如,在DTS中的“转换数据”任务下,查看“选项”选项卡,选中“使用快速加载和表锁定”
SSIS也有类似的东西

我很困惑。您提到--“改为在大容量插入中执行”,但我没有注意到您在大容量插入SQL语句中设置了任何tableoption?你能澄清一下吗?我在第一个查询中使用TABLOCK参数,在第二个查询中使用-h“TABLOCK”我更新了答案,为批量插入器提供了两个查询,一个带TABLOCK,另一个不带TABLOCK。我感到困惑。在我提到的MSDN页面中,默认情况下,在执行大容量插入时,将使用行级锁。为什么你在这里提到tablock(tablock是表锁)?您的意思是建议在执行大容量插入时使用表锁吗?是的,这两个可以从命令行或SSMS执行,但您需要在xp_cmdshell中包装bcp。我的意思是,您还可以通过执行sql任务执行bul insert,您只需检查“使用快速加载”和“表锁”