sqlcmd – Как обойти ограничение длины столбца без пустых пространств? Ms sql express обойти ограничение файла


Как хранить более 10 ГБ в SQL Express (часть 2)

Сегодня я хотел бы вновь поговорить о 10 ГБ ограничении в SQL Server Express. В предыдущем посте я рассказал как можно разнести данные на несколько таблиц находящиеся в разных базах данных, что позволяет уйти от этого ограничения. И так наш сегодняшний гость это FileStream. С помощью него мы уйдем от ограничения в 10 ГБ на базу данных, позволяя хранить практически неограниченные объемы данных.

Достаточно часто встречаются базы данных в которых храняться бинарные данные большого объема. И если вы выбрали SQL Express то вы достаточно быстро подойдете к лимиту. Если вы конечно храните бинарные данные непосредствено в в файлах данных.

Сегодняшний пост посвящен именно этому случаю. У вас есть таблица с бинарными данными, и вы подходите или уже подошли к лимиту в 10 ГБ, который не дает вам дальше продолжать соранять данные в базу данных.

Итак начнем. Создаем базу для тестов, создаем в ней таблицу BlobData и заполняем бинарными данными.

use master; go create database FSDb; go use FSDb; go create table dbo.BlobData ( id int identity (1, 1) , ModTime datetime2(4) , data varbinary(max) , constraint PK_BlobData primary key clustered ( id ) ) go ; with cte ( id ) as ( select 1 union all select id + 1 from cte where id Давайте теперь попробуем перейти на использование FileStream, наши бинарные данные находящиеся в таблице будут храниться непосредствено в файловой системе, а не в файлах данных БД. Для начала если ваш SQL Server Express не отконфигурирован на использование FileStream нужно сделать это. Вот инструкция. Также надо выставить параметр filestream_access_level, выполните следующий скрипт. exec sp_configure filestream_access_level, 1 reconfigure Теперь давайте добавим файловую группу для наших бинарных данныхю use master; go alter database FSDb add filegroup filestreamgroup contains filestream; go alter database FSDb add file ( NAME= 'FSDb_filestream', FILENAME = 'c:\FSDb_filestream' ) to filegroup filestreamgroup go Далее чтобы "магия" заработала нужно выполнить следующие действия: use FSDb; go -- 1. добавляем уникальный идентификатор строки в -- таблицу BlobData alter table dbo.BlobData add FileId uniqueidentifier not null rowguidcol default (newid()) unique go -- 2. указываем в каой файловой группе должны храниться -- бинарные данные alter table dbo.BlobData set ( filestream_on = filestreamgroup ) go -- 3. Создаем varbinary(max) поле и указываем что -- это filestream alter table dbo.BlobData add DataFs varbinary(max) filestream null go -- 4. Перегоняем данные в новое поле update dbo.BlobData set DataFs = Data go -- 5. Удаляем старое поле Data (оно нам больше не -- понадобиться) alter table dbo.BlobData drop column Data; go -- 6. Переименовываем поле DataFs в Data, так чтобы нам -- не пришлось менять наше приложение или процедуры -- которые обращаются к данным из этого столбца. exec sp_rename 'dbo.BlobData.DataFs' , 'Data' , 'COLUMN'; Ну чтож все готово, теперь в вашей таблице может храниться огромное количество данных, практически не ограниченного объема, столько сколько позволяет файловая система. Давайте проведем тест и загоним в базу более 10 ГБ данных. -- создаем большой объект, примерно 344 MB declare @Blob varchar(max) = '16a418c763f4d87b0398e746a418c763f409812734' , @i int = 0 while (@i Данные записались, никаких ошибок о привышении лимита. И в этом нет ничего удивительного, Express версия позволяет использовать FileStream который не имеет никаких органичений по объему хранимых данных. Вот скрин стандартного отчета по используемуму месту в БД, размер файла данных всего 10 МБ:
А вот как выглядят наши данные в файловой системе

qwertysql.blogspot.com

sqlcmd – Как обойти ограничение длины столбца без пустых пространств? MS SQL Server

Я пытаюсь использовать sqlcmd на машине Windows с SQL Server 2005 для записи запроса в файл csv. Параметры командной строки, которые мы обычно используем:

-l 60 -t 300 -r 1 -b -W -h -1

Однако столбцы обрезаются с 256 байтами. В попытке обойти это я попытался использовать эту опцию командной строки вместо -W:

-y 8000

Это захватывает все поля, но проблема с этим методом заключается в том, что файл взлетает от чуть более 1 мб до 200 мб из-за всего лишнего пространства (я понимаю, что 8000, вероятно, переборлит, но, вероятно, оно должно быть не менее 4000 и В настоящее время я работаю только с небольшим подмножеством данных). Опция -W обычно исключает все это дополнительное пространство, но когда я пытаюсь использовать их вместе, это говорит мне, что они взаимоисключающие.

Есть ли способ получить sqlcmd в этом лимите, или кто-нибудь знает, облегчит ли другая программа (например, bcp или osql)?

Изменить: Вот фрагменты кода, которые мы используем, чтобы получить усеченное поле (аналогичный код используется для кучи полей):

SELECT ALIASES.AliasList as complianceAliases,

LEFT OUTER JOIN (Select M1.ID, M1.LIST_ID,stuff((SELECT '{|}' + isnull(Content2,'')+' '+isnull(Content3,'')+' '+isnull(Content4,'')+' '+isnull(Content5,'')+' '+isnull(Content6,'')+' '+isnull(Content7,'') FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M2 with (nolock) WHERE M1.LIST_ID = M2.LIST_ID and M1.ID = M2.ID and M1.TYPE = M2.TYPE FOR XML PATH('') ),1,1,'') as AliasList FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M1 with (nolock) WHERE M1.LIST_ID = 2001 AND M1.TYPE = 'Aliases' GROUP BY m1.list_id,m1.ID,m1.Type) as ALIASES ON ALIASES.LIST_ID = PAIR.COMP_LIST_ID AND ALIASES.ID = PAIR.COMP_ID
Solutions Collecting From Web of "sqlcmd – Как обойти ограничение длины столбца без пустых пространств?"

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

Затем я запускал вывод через программу, которая удаляла повторяющиеся пробелы и решала все проблемы.

sqlserver.bilee.com

Является SQL Server Express доступной базой данных для веб-приложения ASP.NET MVC MS SQL Server

Прежде чем вы начнете использовать версию разработки, вам нужно знать, что это такое и какие ограничения вы используете.

SQLExpress отлично подходит для использования, как для разработчиков, так и при выпуске продукта. Он имеет тот же движок, что и SQL Standard, но с несколькими ограничениями на месте, такими как максимальный размер файла 4 ГБ (и я думаю, что он также имеет ограничение RAM, но не уверен в этом). Вы можете использовать SQL Express в качестве бэкэнд для своего сайта без дополнительных затрат на лицензирование (т.е. бесплатно). Я работал в одном месте, где они разработали систему цепочки нескольких экземпляров SQL Express вместе, чтобы обойти ограничение на 4 ГБ файла, но имейте в виду, что это может нарушить ее лицензию.

SQL Developer на самом деле является SQL Enterprise, но без ограничения времени установки на ОС. Вам также не разрешено использовать SQL Developer для производства (т. Е. Для вашего реального приложения). Для большинства целей, которые вы кодируете на SQL Developer, также можно выполнять на SQL Express, но вы должны быть осторожны, чтобы не использовать какие-либо функции Enterprise – лицензирование Enterprise может быть дорогостоящим вариантом.

Итак, продолжайте использовать SQL Express, это хороший вариант.

PS – я предполагаю, что ваша база данных не будет высокой нагрузкой – если это тогда, вам нужно будет рассмотреть Стандарт или Предприятие.

Вы можете создать приложение ASP.NET MVC, используя любой из них. Экспресс-версия подходит для базового приложения, если у вас нет приложения с высокой нагрузкой, которое требует корпоративных функций.

Если вы намерены запустить приложение в прямом эфире, это зависит от трафика, которое будет иметь приложение. Кроме того, насколько я знаю, версия для разработчиков предназначена только для разработчиков и не может использоваться в рабочей среде.

Многие из примеров MVC, которые я видел, используют локальную .mdf (базу данных SQL) в качестве своего бэкэнд.

Это происходит только потому, что очень легко предоставить физические файлы .mdf с демонстрационными примерами (примеры из сценариев базы данных или что-то подобное). Вы найдете файлы .mdf во многих учебниках, и это не имеет никакого отношения к самому ASP.NET MVC . Примеры, которые вы видели, скорее всего, используют ADO.NET, который работает одинаково в любом приложении.

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

Здесь есть хорошая статья об улучшении производительности с помощью веб-приложений ASP.NET MVC .

sqlserver.bilee.com