2009-07-10 6 views
0

У меня есть хранимая процедура, которая создает базу данных (например: sp_createDB). Аналогичным образом я должен создать 100 баз данных, используя этот. Так что я должен положить его в цикл. Но я не знаю, как это сделать sqlserver. Как это сделать в sqlserver.Как выполнять хранимую процедуру непрерывно?

Помогите мне в этом отношении.

Благодаря

ответ

3

Вы можете использовать ...

exec sprocName 
GO 100 

Смотреть еще here. В общем, это ...

GO [COUNT] 

Престол, MSDN.

+0

Не будет ли цикл while лучше? – Tetraneutron

+0

Привет, JP, посмотрите на мой ответ ниже - http://stackoverflow.com/questions/1108017/how-to-execute-a-stored-procedure-continuosly/1108040#1108040 - для лазейки, если вы используете «GO [ COUNT] ". – Kirtan

+0

@Tetraneutron: В этом случае я бы вообще не согласился, хотя я не использовал этот метод, когда-либо, он явно довольно изящный из-за простоты. Однако можно было бы путать кодеры, не знакомые с синтаксисом. –

3

JP's answer Правильно технически (GO [COUNT] может использоваться для повторения партии заявлений COUNT раз), но есть логическая ошибка. Ваша хранимая процедура будет нуждаться в различных параметрах каждый раз, когда он выполняет (как это должно создать уникальный БД, правда?), Так что вы должны будете петля вокруг использования WHILE как это -

DECLARE @Counter INT 
SET @Counter = 1 

DECLARE @DBName VARCHAR(20) 

WHILE (@Counter <= 100) 
BEGIN 
    PRINT @Counter 
    @DBName = 'DB' + CAST(@Counter AS VARCHAR) 
    EXEC dbo.CreateDB @DBName 
END 
GO 
+0

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

+0

Если это так, то он может определенно использовать подход JP. Но в идеале это так, поэтому я добавил цикл и параметр хранимой процедуры. – Kirtan

1

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

НЕ ИМЯ ВАШИХ ПРОЦЕДУР sp_ ...
НЕ ИМЯ ВАШИХ ПРОЦЕДУР sp_ ...
НЕ ИМЕНИ ВАШИХ ПРОЦЕДУР sp_ ...

Внутри сервера Sql «sp_ ...» зарезервирован для системных хранимых процедур и может запутать людей, знакомых с этим соглашением! Это может вызвать проблемы, если Sql Server когда-либо реализует собственную процедуру «sp_createDB». Кроме того, хранимые процедуры будут выполняться дробно медленнее, если они начинаются с префикса sp_. Это связано с тем, что SQL Server сначала будет искать системную память. В результате НЕ рекомендуется запускать хранимые procs с префиксом sp_

Смежные вопросы