Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как создать таблицу > 1024 поля, чтобы влезало >8k в строку  [new]
Lelek
Member

Откуда:
Сообщений: 170
Здравствуйте, коллеги, прошу помощи.

Дано:
Система, которая на входе требует таблицу с огромным числом полей (>1024). Две и более таблиц понимать не хочет ни при каких обстоятельствах.

Требуется:
Создать таблицу на MSSQL 2008 R2 и заполнить её необходимыми данными.

Проблема:
Таблицы с большим числом полей удаётся создать только с помощью COLUMN_SET, но этот метод не позволяет укладывать в строку более 8k в совокупности, это ограничение неприемлемо (средняя длина строки ~30k). Попытка создания SPARSE столбцов типа varchar(max) тоже не даёт результатов (также возникает ошибка при вставке).

Вопрос:
Есть ли способ обойти обозначенные ограничения и всё-таки создать таблицу с большим числом полей так, чтобы в строку влезало > 8k?

Если вопрос обсуждался, прошу ткнуть меня ссылкой.
1 апр 11, 20:26    [10459515]     Ответить | Цитировать Сообщить модератору
 Re: Как создать таблицу > 1024 поля, чтобы влезало >8k в строку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ну, подсуньте системе таблицу (вьюху), в которую вставка не будет обламываться, и повесьте на нее инстедный триггер, который будет уже правильно рассовывать данные по таблицам.

Хотя может и не прокатить.

З.Ы. Вообще, странная система, которая, судя по вашим словам, не умеет работать с MSSQL как таковым.
1 апр 11, 22:45    [10460074]     Ответить | Цитировать Сообщить модератору
 Re: Как создать таблицу > 1024 поля, чтобы влезало >8k в строку  [new]
Lelek
Member

Откуда:
Сообщений: 170
Гавриленко Сергей Алексеевич
Ну, подсуньте системе таблицу (вьюху), в которую вставка не будет обламываться, и повесьте на нее инстедный триггер, который будет уже правильно рассовывать данные по таблицам.

Хотя может и не прокатить.

З.Ы. Вообще, странная система, которая, судя по вашим словам, не умеет работать с MSSQL как таковым.


Мне достаточно просто подсунуть таблицу, данные идут от MSSQL, но вьюха всё равно не прокатывает, в MSSQL нельзя создать вьюху "exceeds the maximum of 1024 columns".

С MSSQL система работает, проблема в том, что входную информацию по одному объекту она желает получать одной строкой одной таблицы.

Есть возможность подкладывать в систему здоровый SELECT к нескольким таблицам (сейчас так и работает, т.к. MSSQL позволяет селектить одновременно > 1024 столбцов), но это влечёт другие проблемы, поэтому мечтается создать широкую таблицу именно на MSSQL.
2 апр 11, 17:21    [10461491]     Ответить | Цитировать Сообщить модератору
 Re: Как создать таблицу > 1024 поля, чтобы влезало >8k в строку  [new]
Glory
Member

Откуда:
Сообщений: 104751
SQL Server 2005 supports row-overflow storage which enables variable length columns to be pushed off-row. Only a 24-byte root is stored in the main record for variable length columns pushed out of row; because of this, the effective row limit is higher than in previous releases of SQL Server. For more information, see the "Row-Overflow Data Exceeding 8 KB" topic in SQL Server 2005 Books Online.
2 апр 11, 17:27    [10461507]     Ответить | Цитировать Сообщить модератору
 Re: Как создать таблицу > 1024 поля, чтобы влезало >8k в строку  [new]
Lelek
Member

Откуда:
Сообщений: 170
Glory
SQL Server 2005 supports row-overflow storage which enables variable length columns to be pushed off-row. Only a 24-byte root is stored in the main record for variable length columns pushed out of row; because of this, the effective row limit is higher than in previous releases of SQL Server. For more information, see the "Row-Overflow Data Exceeding 8 KB" topic in SQL Server 2005 Books Online.

Читал, но не нашёл способа интерпретировать эту информацию (а также инфо по ссылке) в свою пользу.
Арифметически получается, что, если из только 500 полей - текстовые, требуется 500*24 = 12000k для хранения ссылок, что на страницу не влезет. А текстовых полей у меня больше больше, и ещё куча числовых.
2 апр 11, 18:18    [10461557]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как создать таблицу > 1024 поля, чтобы влезало >8k в строку  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Lelek,

если пользоваться не varchar(512) а varchar(max) то это вам может принести пользу в решении вопроса... в общем попробовал создать таблицу с много полей varchar(max) - получилось...

with c1(i) as (select 1 union all select i+1 from c1 where i<2000)
select 'if object_id(''mytbl'',''U'') is not null drop table mytbl;
create table mytbl (f0000 nvarchar(max) SPARCE, csfas xml COLUMN_SET FOR ALL_SPARSE_COLUMNS)' as txt
union all
select 'alter table mytbl add '+convert(varchar(max),'field'+right('0000'+convert(varchar,i),4)+' nvarchar(max) SPARSE')
from c1
option (maxrecursion 0)


или копипастом результат отработайте или курсором динамикой
21 фев 13, 11:57    [13959839]     Ответить | Цитировать Сообщить модератору
 Re: Как создать таблицу > 1024 поля, чтобы влезало >8k в строку  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Алексей Куренков,

Вы думаете что человек за два года не нашел ответ?
21 фев 13, 13:52    [13960845]     Ответить | Цитировать Сообщить модератору
 Re: Как создать таблицу > 1024 поля, чтобы влезало >8k в строку  [new]
Lelek
Member

Откуда:
Сообщений: 170
WarAnt,

если бы нашёл ответ - отписался бы. Решение искать перестал, т.к. проект внедрения системы развалился.



Алексей Куренков,

Создать-то можно, но вставка строки, в которой суммарно > 8060 байт, даст ошибку.
insert into [dbo].[mytbl] (
[field0001],[field0002],[field0003],[field0004],[field0005],[field0006],[field0007],[field0008],[field0009],[field0010],
[field0011],[field0012],[field0013],[field0014],[field0015],[field0016],[field0017],[field0018],[field0019],[field0020],
[field0021],[field0022],[field0023],[field0024],[field0025],[field0026],[field0027],[field0028],[field0029],[field0030],
[field0031],[field0032],[field0033],[field0034],[field0035],[field0036],[field0037],[field0038],[field0039],[field0040],
[field0041],[field0042],[field0043],[field0044],[field0045],[field0046],[field0047],[field0048],[field0049],[field0050],
[field0051],[field0052],[field0053],[field0054],[field0055],[field0056],[field0057],[field0058],[field0059],[field0060],
[field0061],[field0062],[field0063],[field0064],[field0065],[field0066],[field0067],[field0068],[field0069],[field0070],
[field0071],[field0072],[field0073],[field0074],[field0075],[field0076],[field0077],[field0078],[field0079],[field0080],
[field0081],[field0082],[field0083],[field0084],[field0085],[field0086],[field0087],[field0088],[field0089],[field0090],
[field0091],[field0092],[field0093],[field0094],[field0095],[field0096],[field0097],[field0098],[field0099],[field0100],
[field0101],[field0102],[field0103],[field0104],[field0105],[field0106],[field0107],[field0108],[field0109],[field0110],
[field0111],[field0112],[field0113],[field0114],[field0115],[field0116],[field0117],[field0118],[field0119],[field0120],
[field0121],[field0122],[field0123],[field0124],[field0125],[field0126],[field0127],[field0128],[field0129],[field0130],
[field0131],[field0132],[field0133],[field0134],[field0135],[field0136],[field0137],[field0138],[field0139],[field0140],
[field0141],[field0142],[field0143],[field0144],[field0145],[field0146],[field0147],[field0148],[field0149],[field0150],
[field0151],[field0152],[field0153],[field0154],[field0155],[field0156],[field0157],[field0158],[field0159],[field0160],
[field0161],[field0162],[field0163],[field0164],[field0165],[field0166],[field0167],[field0168],[field0169],[field0170],
[field0171],[field0172],[field0173],[field0174],[field0175],[field0176],[field0177],[field0178],[field0179],[field0180],
[field0181],[field0182],[field0183],[field0184],[field0185],[field0186],[field0187],[field0188],[field0189],[field0190],
[field0191],[field0192],[field0193],[field0194],[field0195],[field0196],[field0197],[field0198],[field0199],[field0200],
[field0201],[field0202],[field0203],[field0204],[field0205],[field0206],[field0207],[field0208],[field0209],[field0210],
[field0211],[field0212],[field0213],[field0214],[field0215],[field0216],[field0217],[field0218],[field0219],[field0220],
[field0221],[field0222],[field0223],[field0224],[field0225],[field0226],[field0227],[field0228],[field0229],[field0230],
[field0231],[field0232],[field0233],[field0234],[field0235],[field0236],[field0237],[field0238],[field0239],[field0240],
[field0241],[field0242],[field0243],[field0244],[field0245],[field0246],[field0247],[field0248],[field0249],[field0250],
[field0251],[field0252],[field0253],[field0254],[field0255],[field0256],[field0257],[field0258],[field0259],[field0260],
[field0261],[field0262],[field0263],[field0264],[field0265],[field0266],[field0267],[field0268],[field0269],[field0270],
[field0271],[field0272],[field0273],[field0274],[field0275],[field0276],[field0277],[field0278],[field0279],[field0280],
[field0281],[field0282],[field0283],[field0284],[field0285],[field0286],[field0287],[field0288],[field0289],[field0290],
[field0291],[field0292],[field0293],[field0294],[field0295],[field0296],[field0297],[field0298],[field0299],[field0300],
[field0301],[field0302],[field0303],[field0304],[field0305],[field0306],[field0307],[field0308],[field0309],[field0310],
[field0311],[field0312],[field0313],[field0314],[field0315],[field0316],[field0317],[field0318],[field0319],[field0320],
[field0321],[field0322],[field0323],[field0324],[field0325],[field0326],[field0327],[field0328],[field0329],[field0330],
[field0331],[field0332],[field0333],[field0334],[field0335],[field0336],[field0337],[field0338],[field0339],[field0340],
[field0341],[field0342],[field0343],[field0344],[field0345],[field0346],[field0347],[field0348],[field0349],[field0350],
[field0351],[field0352],[field0353],[field0354],[field0355],[field0356],[field0357],[field0358],[field0359],[field0360],
[field0361],[field0362],[field0363],[field0364],[field0365],[field0366],[field0367],[field0368],[field0369],[field0370],
[field0371],[field0372],[field0373],[field0374],[field0375],[field0376],[field0377],[field0378],[field0379],[field0380],
[field0381],[field0382],[field0383],[field0384],[field0385],[field0386],[field0387],[field0388],[field0389],[field0390],
[field0391],[field0392],[field0393],[field0394],[field0395],[field0396],[field0397],[field0398],[field0399],[field0400],
[field0401],[field0402],[field0403],[field0404],[field0405],[field0406],[field0407],[field0408],[field0409],[field0410],
[field0411],[field0412],[field0413],[field0414],[field0415],[field0416],[field0417],[field0418],[field0419],[field0420],
[field0421],[field0422],[field0423],[field0424],[field0425],[field0426],[field0427],[field0428],[field0429],[field0430],
[field0431],[field0432],[field0433],[field0434],[field0435],[field0436],[field0437],[field0438],[field0439],[field0440],
[field0441],[field0442],[field0443],[field0444],[field0445],[field0446],[field0447],[field0448],[field0449],[field0450],
[field0451],[field0452],[field0453],[field0454],[field0455],[field0456],[field0457],[field0458],[field0459],[field0460],
[field0461],[field0462],[field0463],[field0464],[field0465],[field0466],[field0467],[field0468],[field0469],[field0470],
[field0471],[field0472],[field0473],[field0474],[field0475],[field0476],[field0477],[field0478],[field0479],[field0480],
[field0481],[field0482],[field0483],[field0484],[field0485],[field0486],[field0487],[field0488],[field0489],[field0490],
[field0491],[field0492],[field0493],[field0494],[field0495],[field0496],[field0497],[field0498],[field0499],[field0500]
)
VALUES
(
'field0001','field0002','field0003','field0004','field0005','field0006','field0007','field0008','field0009','field0010',
'field0011','field0012','field0013','field0014','field0015','field0016','field0017','field0018','field0019','field0020',
'field0021','field0022','field0023','field0024','field0025','field0026','field0027','field0028','field0029','field0030',
'field0031','field0032','field0033','field0034','field0035','field0036','field0037','field0038','field0039','field0040',
'field0041','field0042','field0043','field0044','field0045','field0046','field0047','field0048','field0049','field0050',
'field0051','field0052','field0053','field0054','field0055','field0056','field0057','field0058','field0059','field0060',
'field0061','field0062','field0063','field0064','field0065','field0066','field0067','field0068','field0069','field0070',
'field0071','field0072','field0073','field0074','field0075','field0076','field0077','field0078','field0079','field0080',
'field0081','field0082','field0083','field0084','field0085','field0086','field0087','field0088','field0089','field0090',
'field0091','field0092','field0093','field0094','field0095','field0096','field0097','field0098','field0099','field0100',
'field0101','field0102','field0103','field0104','field0105','field0106','field0107','field0108','field0109','field0110',
'field0111','field0112','field0113','field0114','field0115','field0116','field0117','field0118','field0119','field0120',
'field0121','field0122','field0123','field0124','field0125','field0126','field0127','field0128','field0129','field0130',
'field0131','field0132','field0133','field0134','field0135','field0136','field0137','field0138','field0139','field0140',
'field0141','field0142','field0143','field0144','field0145','field0146','field0147','field0148','field0149','field0150',
'field0151','field0152','field0153','field0154','field0155','field0156','field0157','field0158','field0159','field0160',
'field0161','field0162','field0163','field0164','field0165','field0166','field0167','field0168','field0169','field0170',
'field0171','field0172','field0173','field0174','field0175','field0176','field0177','field0178','field0179','field0180',
'field0181','field0182','field0183','field0184','field0185','field0186','field0187','field0188','field0189','field0190',
'field0191','field0192','field0193','field0194','field0195','field0196','field0197','field0198','field0199','field0200',
'field0201','field0202','field0203','field0204','field0205','field0206','field0207','field0208','field0209','field0210',
'field0211','field0212','field0213','field0214','field0215','field0216','field0217','field0218','field0219','field0220',
'field0221','field0222','field0223','field0224','field0225','field0226','field0227','field0228','field0229','field0230',
'field0231','field0232','field0233','field0234','field0235','field0236','field0237','field0238','field0239','field0240',
'field0241','field0242','field0243','field0244','field0245','field0246','field0247','field0248','field0249','field0250',
'field0251','field0252','field0253','field0254','field0255','field0256','field0257','field0258','field0259','field0260',
'field0261','field0262','field0263','field0264','field0265','field0266','field0267','field0268','field0269','field0270',
'field0271','field0272','field0273','field0274','field0275','field0276','field0277','field0278','field0279','field0280',
'field0281','field0282','field0283','field0284','field0285','field0286','field0287','field0288','field0289','field0290',
'field0291','field0292','field0293','field0294','field0295','field0296','field0297','field0298','field0299','field0300',
'field0301','field0302','field0303','field0304','field0305','field0306','field0307','field0308','field0309','field0310',
'field0311','field0312','field0313','field0314','field0315','field0316','field0317','field0318','field0319','field0320',
'field0321','field0322','field0323','field0324','field0325','field0326','field0327','field0328','field0329','field0330',
'field0331','field0332','field0333','field0334','field0335','field0336','field0337','field0338','field0339','field0340',
'field0341','field0342','field0343','field0344','field0345','field0346','field0347','field0348','field0349','field0350',
'field0351','field0352','field0353','field0354','field0355','field0356','field0357','field0358','field0359','field0360',
'field0361','field0362','field0363','field0364','field0365','field0366','field0367','field0368','field0369','field0370',
'field0371','field0372','field0373','field0374','field0375','field0376','field0377','field0378','field0379','field0380',
'field0381','field0382','field0383','field0384','field0385','field0386','field0387','field0388','field0389','field0390',
'field0391','field0392','field0393','field0394','field0395','field0396','field0397','field0398','field0399','field0400',
'field0401','field0402','field0403','field0404','field0405','field0406','field0407','field0408','field0409','field0410',
'field0411','field0412','field0413','field0414','field0415','field0416','field0417','field0418','field0419','field0420',
'field0421','field0422','field0423','field0424','field0425','field0426','field0427','field0428','field0429','field0430',
'field0431','field0432','field0433','field0434','field0435','field0436','field0437','field0438','field0439','field0440',
'field0441','field0442','field0443','field0444','field0445','field0446','field0447','field0448','field0449','field0450',
'field0451','field0452','field0453','field0454','field0455','field0456','field0457','field0458','field0459','field0460',
'field0461','field0462','field0463','field0464','field0465','field0466','field0467','field0468','field0469','field0470',
'field0471','field0472','field0473','field0474','field0475','field0476','field0477','field0478','field0479','field0480',
'field0481','field0482','field0483','field0484','field0485','field0486','field0487','field0488','field0489','field0490',
'field0491','field0492','field0493','field0494','field0495','field0496','field0497','field0498','field0499','field0500'
)


Msg 511, Level 16, State 1, Line 1
Cannot create a row of size 11012 which is greater than the allowable maximum row size of 8060.
The statement has been terminated.


Арифметически, для хранения одной ссылки (поле varchar(max), по сути - ссылка) требуется 24 байта, 24*500 = 12000, что больше размера страницы.
22 фев 13, 11:23    [13965614]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить