使用此代码(*),在SQL中创建一个宽表让我发送:
Msg 1702, Level 16, State 1, Line 11
CREATE TABLE failed because column '2010/12/01' in table 'PriceToBookFinalI' exceeds the maximum of 1024 columns.
USE [Style] GO
CREATE TABLE [dbo].[PriceToBookFinalI]
(DocID int PRIMARY KEY,
[2006/12/29][Money],
[2007/01/01][Money],
...
SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);
GO
(2614 columns)
寻找好的提示!
以下是我要导入宽表
的背景数据集答案 0 :(得分:3)
此解决方案是规范您的设计。即使你可以适应1024限制,你的设计也不是一个好主意。例如,如果您想知道DocID每月更改的平均金额,该怎么办?在这个模型中写下这将是一场噩梦。
试试这个。
CREATE TABLE dbo.PriceToBookFinalI (
DocID INT PRIMARY KEY,
SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
);
CREATE TABLE dbo.PriceToBookFinalMoney (
DocID INT,
DocDate DATE,
DocAmount MONEY,
CONSTRAINT PK_PriceToBookFinalMoney
PRIMARY KEY CLUSTERED
(
DocID,
DocDate
)
);
您可以轻松地将具有SpecialPurposeColumns的表格加入到表格中,其中包含每个DocID的日期和金额。您仍然可以根据需要将日期转换为上面提供的格式。将日期作为列中的值使您可以更灵活地使用数据,获得更好的性能,并自然地处理更多日期。
答案 1 :(得分:2)
将其标准化,允许将查询作为查询的一部分:
Create table Price (DocID INT primary key,
DocRef Varchar(30), -- the values from your [DATES] column
DocDate DATE,
DocValue MONEY);
答案 2 :(得分:1)
使用三列创建表:ID,Date,Amount。每个ID在表格中都有多行(对于每个日期,其中有一个金额值)。
答案 3 :(得分:0)
SQL Server中存在列数限制:
https://msdn.microsoft.com/en-us/library/ms143432.aspx
Columns per nonwide table 1,024
Columns per wide table 30,000
您可以使用"宽表",其中是稀疏列 - 列集。 https://msdn.microsoft.com/en-us/library/cc280521.aspx
但是 - 表有限制 - 每行8,060字节。因此,您的大多数列都没有数据。
所以 - 问题在于你的设计。看起来,几个月应该是行,而不是列。或者更好的是表格的其他结构。如果没有在应用程序中看到数据结构,就无法猜到。