Хранение неизвестного типа данных в базе данных MS SQL Server - PullRequest
6 голосов
/ 07 октября 2010

Есть ли у кого-нибудь представление о том, как лучше хранить неизвестный тип данных в таблице. По сути, мне нужно хранить типы, такие как bit, smallint, int, real и nvarchar, в одном столбце «value» для последующей интерпретации приложением .NET.

Я пытался найти наилучшее из возможных решений, чтобы не ставить под угрозу производительность или рост базы данных.

Есть предложения?

Заранее спасибо!

Ответы [ 5 ]

11 голосов
/ 07 октября 2010

Varchar (max), вероятно, самый простой способ сделать это.

sql_variant был разработан для этой цели, чтобы вы могли его использовать, но прочитайте запись Books Online, чтобы убедиться, что она будет делать то, что вы хотите.

http://msdn.microsoft.com/en-us/library/ms181071.aspx

1 голос
/ 07 октября 2010

Я не уверен, что вы подразумеваете под «неизвестным типом». Если вы имеете в виду, что значение является одним из ограниченного числа возможных типов, то я бы использовал таблицу с одним типом столбца (строго типизированный) для каждого возможного типа и таблицу «суперкласса», чтобы указать, какую таблицу следует искать.

1 голос
/ 07 октября 2010

На мой взгляд, у вас есть только два варианта:

Ваш объект должен быть сохранен как некая строка.Эта строка может быть необработанной строкой или XML.Если вы «сериализуете» его как XML и сохраняете его в базе данных, опять же, вы можете выбрать nvarchar или XML.Я хотел бы отметить, что «сериализация это» будет раздувать данные.Если вы можете разумно определить тип данных, основываясь на другом столбце, который вы можете извлекать одновременно, я бы посоветовал просто ввести его в виде строки.

0 голосов
/ 07 октября 2010

попробуйте это:

YourTableName
...more columns...
ColType char(1)       --B=bit, S=smallint, I=int, R=real, n=nvarchar, you can FK to a table to store these or just check constraint them
Col     nvarchar(x)   --where x is large enought to hold your longest string or other value
...more columns...

в приложении .Net, прочитайте ColType и преобразуйте столбец Col в этот тип. При сохранении SQL Server преобразует собственные типы данных в nvarchar () для вас.

0 голосов
/ 07 октября 2010

Храните как varchar (или nvarchar ).Это будет обрабатывать все типы.Вам нужно будет определить, какую длину сделать, основываясь на том, что вы знаете о ваших данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...