Автоматически генерировать определенный пользователем тип таблицы, соответствующий существующей таблице - PullRequest
7 голосов
/ 20 января 2012

У меня есть несколько таблиц, которые уже существуют в моей базе данных. Некоторые из них имеют довольно много столбцов.

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

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

Но что мне действительно нужно, так это способ создания пользовательского типа таблицы из существующей таблицы в моей базе данных. Затем я мог бы добавить этот скрипт в свою базу данных (а затем добавить новые столбцы в таблица не требует более одного редактирования).

Есть ли способ сделать это? Или я должен просто заняться сценариями своих таблиц?

Ответы [ 3 ]

3 голосов
/ 20 января 2012

В SQL Server Management Studio вы можете щелкнуть правой кнопкой мыши базу данных и в разделе ЗАДАЧИ выбрать сценарий базы данных. Выберите Только таблицы, а затем интересующие вас таблицы.

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

2 голосов
/ 02 мая 2016

Время от времени мне нужно одно и то же. Вот небольшой сценарий, который я собрал. Это немного грубо, и я бы не стал доверять это своей жизни, но это работает достаточно хорошо для моего случая. Это не скриптовые ключи, но для моего сценария это не обязательно. Я нахожусь на SQL 2012, так что я не совсем уверен, что это будет работать так же, как на SQL 2008. Я не тестировал его для некоторых более «экзотических» типов, таких как geometry, geography и друзей, так как Мне никогда не нужно было их использовать.

declare
    @tablename nvarchar(50)='Users',
    @schemaname nvarchar(50)='dbo',
    @sql nvarchar(max)=N'';

select @sql += N',' + NCHAR(13) + NCHAR(10) + NCHAR(9) + N'[' + c.COLUMN_NAME + N'] [' + DATA_TYPE + N']'
    + case when c.CHARACTER_MAXIMUM_LENGTH is not null then N'(' + case c.CHARACTER_MAXIMUM_LENGTH when -1 then 'max' else cast(c.CHARACTER_MAXIMUM_LENGTH as nvarchar(10)) end + N')' else N'' end
    + case when c.DATA_TYPE = N'numeric' then N'('+CAST(NUMERIC_PRECISION as nvarchar(10))+N', '+CAST(NUMERIC_SCALE as nvarchar(10))+N')' else N'' end
    + case when c.is_nullable <> N'NO' then N' NULL' else N' NOT NULL'end
from INFORMATION_SCHEMA.COLUMNS c
where TABLE_NAME = @tablename AND TABLE_SCHEMA = @schemaname
order by ORDINAL_POSITION;

set @sql = stuff(@sql, 1, 1, N'CREATE TYPE [' + @schemaname + N'].[tab_' + @tablename + N'] AS TABLE(')
    + nchar(13) + nchar(10) + ')' + nchar(13) + nchar(10) + 'GO';
set @sql += nchar(13) + nchar(10) + '--GRANT EXEC ON TYPE::[' + @schemaname + N'].[tab_' + @tablename + N'] TO [User];'
    + nchar(13) + nchar(10) + '--GO';

print @sql
-- If you're happy with the sql, you can pass it to sp_executesql to create your type
-- exec sp_executesql @sql;
1 голос
/ 23 января 2012

Я никогда не знал, что существует мастер для создания сценариев базы данных, подобный тому, о котором говорит Демс в своем ответе. И это кажется более универсальным методом, чем тот, который я использовал, потому что мастер позволяет вам генерировать сценарии для различных типов объектов за один раз.

Тем не менее, я предполагаю, что поделюсь своим, так как он кажется мне немного проще и очень удобен, когда вам нужно только для сценариев объектов одного типа, как только таблицы.

Итак, вот (специально для таблиц):

  1. Откройте Обозреватель объектов ( F8 ) и подключите его к экземпляру целевого сервера.

  2. Расширение Базы данных Элемент.

  3. Разверните элемент именем вашей базы данных.

  4. Нажмите Таблицы .

  5. Открыть сведения об объекте ( F7 ). Теперь должен отображаться список пользовательских таблиц.

  6. Используя стандартные методы Windows для выбора нескольких объектов (например, Ctrl + щелчок), выберите таблицы, которые вы хотите сценарий.

  7. Щелкните правой кнопкой мыши по любому из выбранных элементов и выберите Таблица сценариев как ▸ , затем выберите тип сценария и место его сохранения.

Когда вам нужно написать сценарий для разных типов объектов, перейдите в другую «папку» Обозревателя объектов вместо Таблицы , например. для хранимых процедур это будет Программируемость \ Хранимые процедуры .

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