动态列数超出最大列限制SQL Server

时间:2014-04-02 16:45:22

标签: sql sql-server database-design

我认为真正需要创建一个包含数百列的查询。

我们正在为我们的客户邮寄邮件。在这封邮件中,他们列出了客户可以获取信息的几个位置。当我们的设计师为这个邮件创建模板时,他们正在为每个地址设置“Slots”。邮件上的插槽数量从一封邮件到另一封邮件各不相同,从6个到50个不等。

我对查询的需求是将数据合并到邮件中。我需要提供一个查询,其中每个邮件是1条记录,其中包含该邮件所需的所有信息。我正在动态创建带有该邮件上最大插槽数的SQL语句。在该邮件中最多有50个插槽,我的查询需要如下所示:

MailingID, 
LogoLocation, 
APNCode, 
TFN, 
CopyVersion, 
Slot1_Name, 
Slot1_Address, 
Slot1_City, 
Slot1_State,
Slot1_DateTime,
...
Slot50_Name,
Slot50_Address,
Slot50_City,
Slot50_State,
Slot50_DateTime

我的第一次尝试是创建一个包含所有这些字段的表,但是我收到了这个错误:

The table has been created, but its maximum row size exceeds the allowed maximum of 8060 bytes. INSERT or UPDATE to this table will fail if the resulting row exceeds the size limit.

他们只想要CSV文件中的数据,所以我不需要为它创建临时表。

我的问题是我正在尝试创建一个标准流程,并且字段数量不同,我希望以一种每次尝试运行时都不会炸毁系统的方式进行设置它

我查看了几页,发现了有关SQL Server大小限制的详细信息以及一些评论说这样的表显示了错误的数据库设计。 http://msdn.microsoft.com/en-us/library/ms143432(v=sql.105).aspx http://social.msdn.microsoft.com/Forums/en-US/fec1efbb-94ff-4fe9-8d69-12e95c48587d/its-maximum-row-size-exceeds-the-allowed-maximum-of-8060-bytes-insert-or-update-to-this-table-will?forum=transactsql Work around SQL Server maximum columns limit 1024 and 8kb record size

我希望有人在这方面有一些经验,可以分享一些有关如何提高效率的见解。还有另一种方法可以实现这个我不知道的方法吗?

更新: 感谢所有快速回复。

有关我的方案的更多细节。您可以通过邮件获得传单,当您将传单翻过来时,它会列出您所在县的50个地点,您可以在那里上课或参加会议等。该传单的所有详细信息都需要在1条记录中,以便他们可以在一页上映射字段。如果该县有50个地址/日期/时间组合,他们需要将它们包含在1个记录中,以便他们可以正确地插入传单。想想巨型邮件合并,可能只有100个县(100个传单),但每个传单都有大量的信息。

当数据实际存储在数据库中时,我正在存储特定传单的ID(MailingID),每个地址/日期/时间组合都是自己的记录。它只是将细节合并到必须像这样非规范化的创意作品上所需的文件。

我无法找到有关视图限制的任何详细信息。 View是否与表具有相同的限制?是否可以为他们创建一个他们可以在需要数据时下载的视图?

1 个答案:

答案 0 :(得分:0)

All the details for that flyer needs to be in 1 record so they can map the fields on the one page这是一个值得怀疑的假设。为什么数据不能存储在第二个表中的50行中?

无论如何,如果你坚持将所有内容存储在一行中,你应该使用XML或JSON。这使得所有这些问题都消失了。 SQL Server对XML有很好的支持。您甚至可以动态生成XML。因此,您可以在第二个表中正确存储50个项目,并且只将它们组合成一个XML值以供查询。