Можете ли вы связать базу данных с другой в SQL Server? - PullRequest
0 голосов
/ 07 ноября 2019

Я записываю измерения в базу данных, но в SQL Server 2012 Express размер базы данных ограничен 10 ГБ на базу данных, и он уже заполнен. Если я создам новую базу данных, смогу ли я связать две базы данных вместе, предоставив мне базу данных объемом 20 ГБ?

1 Ответ

0 голосов
/ 07 ноября 2019

Существует обходной путь, который будет работать следующим образом, хотя он не обязательно оптимален. Для этого вам потребуется создать хранимую процедуру для ВСТАВКИ ваших данных, хранимую процедуру для ОБНОВЛЕНИЯ ваших данных (при необходимости) и ПРОСМОТР для извлечения ваших данных. По сути, вы будете воссоздавать функциональность секционирования SQL Server на упрощенном уровне.

Сначала создайте количество баз данных, с которыми вы хотите работать. В этом примере давайте используем четыре базы данных с именами DB1, DB2, DB3 и DB4.

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

Для этого примера давайте создадим SEQUENCE, чтобы контролировать, какая база данных вставленав. SEQUENCE похоже на идею поля IDENTITTY, но оно не привязано к таблице. Чтобы создать последовательность, используйте такой код:

CREATE SEQUENCE MySequence as bigint
    START AT 1
    INCREMENT BY 1

Чтобы выполнить вставку, используйте значение последовательности, чтобы определить, в какую базу данных будет вставлена. В этом случае я буду использовать функциональность по модулю в SQL Server, но вы также можете разделить ее на диапазоны номеров.

DECLARE @db int,
    @NewSeq bigint
SET @NewSeq = NEXT VALUE FOR dbo.MySequence
SET @db = (@NewSeq % 4) + 1  -- you'll see why in a moment

Можно подумать, что использование %как возвращение остатка после целочисленного деления. Итак, если вы вычислите 14 % 4, вы получите значение 2, поскольку четыре входит в 14 три раза, оставляя остаток от двух. Для любого целого числа, деление по модулю на четыре вернет значение ноль, один, два или три.

Теперь вы знаете, в какую базу данных вставлять. Вы можете использовать оператор CASE и выполнять разные биты кода или хранимые процедуры для каждой базы данных для вставки, но я предпочитаю использовать для этого код динамический SQL , например:

DECLARE @SQL varchar(1000)
SET @SQL = 'INSERT INTO [DB' + Cast(@db as char(1)) + '].'[dbo].MyTable (a,b,c) VALUES (''' + <logtext> + ''', GETDATE(), 1)'

EXEC (@sql)

Этого должно хватить, чтобы начать работу с этой идеей.

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