2016-06-19 181 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 
相關問題