2016-06-19 184 views
1

我想创建一组数据库(数据库名称应该从一个数据库中的表(在同一个实例中)按增量顺序挑选)。任何人都可以帮助我如何做到这一点?SQL Server数据库组创建脚本

DECLARE @loopcounter INT = 1, @Maxid INT = 100, @zid nvarchar(100)  

WHILE(@LoopCounter <= @Maxid) 
BEGIN 
    SELECT @zid = zids 
    FROM dbo.list_zid WHERE id = @LoopCounter 

    SET @LoopCounter = @LoopCounter + 1 

    print @zid 
    end 

DECLARE @DBNAME VARCHAR(50) 
SET @DBNAME = '@zid' 

CREATE DATABASE @DBNAME 
GO 
ALTER DATABASE @DBNAME SET COMPATIBILITY_LEVEL = 90 
GO 
ALTER DATABASE @DBNAME SET RECOVERY SIMPLE 
GO 

回答

0

所以,首先你将不得不使用动态SQL文本从表中可以让你开到各类安全问题的警告,所以不这样做,如果你不是100%肯定的数据库值!!!!接下来你有它的要点,但你不能只是将变量传递给你想要执行的语句。你必须建立字符串然后执行字符串。请参阅示例以了解在哪里以及如何执行此操作的逻辑。我没有向你展示如何从你的表格中获取DBName,如果你不知道你不应该使用这种技术,那么你写出来的内容看起来就像你可以弄清楚的一样。

DECLARE @loopcounter INT = 1, @Maxid INT = 100, @zid nvarchar(100)  

    WHILE(@LoopCounter <= @Maxid) 
    BEGIN 
     DECLARE @DBNAME VARCHAR(50) 
     SET @DBNAME = '@zid' 

     SELECT @zid = zids 
     FROM dbo.list_zid WHERE id = @LoopCounter 
     --if you are getting the @zid out of the database I would assume you can also get the name on this query too???? 



     DECLARE @SQLStatements NVARCHAR(MAX) 
     SET @SQLStatements = ' 
    CREATE DATABASE ' + @DBNAME + ' 
    GO 
    ALTER DATABASE ' + @DBNAME + ' SET COMPATIBILITY_LEVEL = 90 
    GO 
    ALTER DATABASE ' + @DBNAME + ' SET RECOVERY SIMPLE 
    GO' 

     EXECUTE (@SQL) 


     SET @LoopCounter = @LoopCounter + 1 
      print @zid 
    END 
相关问题