2016-06-19 8 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

だから、最初の警告は、あなたがデータベースの値を100%特定されていない場合ので、これをしないセキュリティ問題のすべての種類に開いてあなたを残すことができますどのテーブルからテキストで動的SQLを使用する必要があります!!!!次に、その要点はありますが、実行したいステートメントに変数を渡すことはできません。文字列を作成してから文字列を実行する必要があります。これを行う場所と方法のロジックについては、例を参照してください。私はあなたのテーブルから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 
関連する問題