Как я могу создать новую базу данных со схемой в хранимой процедуре? - PullRequest
5 голосов
/ 10 января 2012

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

Поэтому я использую множество операторов EXEC:

EXEC('CREATE TABLE ' + @dbName + '.dbo.MyTable (...)');

и т. Д., А также некоторые CREATE PROCEDURE, CREATE FUNCTION и т. Д. Однако проблема возникает из-за того, что я хочу создать тип, поскольку операторам CREATE TYPE не может быть указана база данных, а у вас не может быть USE @dbName в хранимой процедуре.

Как создать тип в другой базе данных в хранимой процедуре?

Ответы [ 3 ]

7 голосов
/ 26 ноября 2013

Существуют определенные команды, которые нельзя использовать, если ssarabando предлагает, среди них CREATE SCHEMA, которая выдает Msg 111 при использовании с этой техникой.

Обходной путь заключается во вложении динамических блоков SQL следующим образом:

exec('use tempdb; exec sp_executesql N''create schema test'' ')

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

Обратите внимание, что внутреннему параметру sp_executesql нужны две одинарные кавычки.

0 голосов
/ 10 января 2012

Вы также можете использовать это, например:

EXEC('use ' + @dbName + ';create type somename from int not null;')

Это выберет правильную базу данных перед созданием типа.

0 голосов
/ 10 января 2012

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

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