Как создать 20 баз данных за раз в sqlserver?

Я написал следующую процедуру для создания серии из 20 баз данных. Но это не создает их. База данных не создается, даже когда я перехожу на свой диск H: и не могу найти файлы ldf и mdf с именем bharath1 bharath2 вроде ...

Что я сделал с этим не так?

USE master
GO

DECLARE @command varchar(1000), @i int

while @i < 5

  SET @command = 'CREATE DATABASE Bharath' + CAST(@i AS varchar) + '
     ON ( NAME = ''Bharath_dat'',
  FILENAME = ''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\Bharath' +
  CAST(@i AS varchar) + '.mdf'', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )

  LOG ON ( NAME = ''Bharath_log'', 
           FILENAME = ''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\Bharath' +
    CAST(@i AS varchar) + '.ldf'', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )'

  EXEC (@command)

  SET @i = @i + 1

GO

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

Любая помощь очень ценится.


person Cute    schedule 17.07.2009    source источник


Ответы (3)


Хорошо, я не вижу блоков BEGIN и END сразу после цикла WHILE, что может привести к тому, что SQL выполнит бесконечный цикл только для выполнения оператора SET @command.

Вам нужно заключить WHILE в BEGIN и END ...

DECLARE @command as varchar(1000), @i int
SET @i = 0
WHILE @i < 5
BEGIN
  SET @command = 'CREATE DATABASE Example' + CAST(@i AS varchar)
  EXEC(@command)
  SET @i = @i + 1
END

У меня это работает. (SET @i = 0 является обязательным)

person Jimmy Chandra    schedule 17.07.2009

Вам нужно инициализировать @i, добавить это после вашего объявления:

SET @i = 1
person cjk    schedule 17.07.2009

Есть несколько вещей, которые вы упустили - вам прежде всего нужно поместить несколько ваших SQL-команд, которые вы хотите выполнять снова и снова, в блок BEGIN......END.

Во-вторых, вам нужно инициализировать свой @i счетчик! В противном случае он никогда никогда не попадет в цикл WHILE.

И в-третьих, ваш вызов CREATE DATABASE был неправильным - вам нужно указать файловую группу, в которой создается база данных (CREATE DATABASE (name) ON (filegroup) .......).

Вот мой код:

USE master
GO

DECLARE @command varchar(1000), @instanceName VARCHAR(100), @i int

SET @i = 1

WHILE @i <= 5
BEGIN
  SET @instanceName = 'Bharath' + CAST(@i AS VARCHAR(10))

  SET @command = 'CREATE DATABASE ' + @instanceName + 
     ' ON PRIMARY ( NAME = N''' + @instanceName + ''', ' +
     'FILENAME = ''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\' +
     @instanceName + '.mdf'', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) ' +
     'LOG ON ( NAME = N''' + @instanceName + '_LOG'', ' + 
     'FILENAME = ''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\' +
     @instanceName + '.ldf'', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )'

  EXEC (@command)

  SET @i = @i + 1
END
GO
person marc_s    schedule 17.07.2009