如何在SQLServer2008中创建宽表?它的使用限制是什么?

如何在SQLServer2008中创建宽表?它的使用限制是什么?,sql,tsql,sql-server-2008,ddl,Sql,Tsql,Sql Server 2008,Ddl,我正在看报纸,突然看到一张宽大的桌子。它与标准表的不同之处在于,它可以有多达30000列,而普通(窄)表仅限于更熟悉的1024列。我在谷歌上搜索了宽桌子,但似乎找不到相关的东西。这个新表类型是否有更正式的名称 那么为什么我们有两种不同类型的表,如何创建这个特殊的表,以及使用这个似乎可以容纳更多数据的表有什么限制?要创建表格或将表格更改为宽表格,请在表格定义中添加一个 从中,宽表是使用列集和稀疏列的表。它仍然遵循每行相同的宽度限制(8019字节),因此通常只在列大部分为空时使用它 有关…的更多信息

我正在看报纸,突然看到一张宽大的桌子。它与标准表的不同之处在于,它可以有多达30000列,而普通(窄)表仅限于更熟悉的1024列。我在谷歌上搜索了宽桌子,但似乎找不到相关的东西。这个新表类型是否有更正式的名称

那么为什么我们有两种不同类型的表,如何创建这个特殊的表,以及使用这个似乎可以容纳更多数据的表有什么限制?要创建表格或将表格更改为宽表格,请在表格定义中添加一个


中,宽表是使用列集和稀疏列的表。它仍然遵循每行相同的宽度限制(8019字节),因此通常只在列大部分为空时使用它

有关…的更多信息,请参见此处


    • 然而,您通常不想这样做!行有大小限制,检索数据可能比使用相关表(即使是具有一对一关系的表)要慢。我从未见过这样一个例子,它比相关的表更好

      另一个限制是宽表不能用于事务或合并复制。请参阅此处的“支持稀疏列的SQL Server技术”部分:


      你是说超过30000根柱子而不是道路吗?是的。我的自动拼写修正器自动地将单词改成了一些愚蠢的东西。请原谅。此参考说明是:“事务性复制支持稀疏列,但不支持列集”,您能否澄清您的答案,并查看我的相关未回答问题?若要将表变为宽表,您必须创建稀疏列并添加列集。如果不创建列集,表仍将被限制为1024列。8K限制适用于SQL Server 2016之前的版本,请参阅[link]SQL 2016的每行字节限制仍为8060,但行溢出确实允许您存储更多数据。这在2016年并不新鲜,而且已经存在了很长一段时间。你是从哪里想出8019这个数字作为页面宽度限制的?不知道这是从哪里来的-太久以前了。行的当前宽度限制为8060字节。我能找到的最接近的是这一页上说的8018稀疏列的宽度限制-通常我同意,但你考虑过所有情况吗?例如,我有一个导出到excel的程序,需要将数据暂存到表中。1300多列,大部分为空。当其他一切都不起作用的时候。。。
      CREATE TABLE [UR_DB].[dbo].[DesiredTableName]
      (DocID int PRIMARY KEY,
      Title varchar(200) NOT NULL,
      ProductionSpecification varchar(20) SPARSE NULL,
      ProductionLocation smallint SPARSE NULL,
      MarketingSurveyGroup varchar(20) SPARSE NULL,
      MarketingProgramID int SPARSE NULL,
      SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);