遊標遍歷全部數據庫循環執行修改數據庫的sql命令

MSSQL數據庫服務器上有不少相似的數據庫,須要將這些數據庫統一修改其中的某些表或者某些命令,那麼就會想到用遊標來遍歷。sql

先來講思路:數據庫

1,首先須要查詢出全部的數據庫;服務器

  select [name] from [master].[dbo].[sysdatabases] order by [name]; --查詢MSSQL中全部數據庫名稱spa

2,用遊標CURSOR來集合查詢出來的數據庫名稱集合,來實現循環遍歷每個數據庫;code

3,在循環遍歷每個數據庫名稱時,經過拼接sql語句來實現命令字符串,而且用EXEC執行命令;blog

注意:能夠根據我的須要對數據庫名稱進行篩選。token

 

代碼示例以下:字符串

DECLARE @sysname sysname; --數據庫名稱變量

DECLARE My_Cursor CURSOR --定義遊標
FOR (select [name] from [master].[dbo].[sysdatabases]) --查出全部的數據庫名稱的集合放到遊標中
OPEN My_Cursor; --打開遊標
FETCH NEXT FROM My_Cursor INTO @sysname; --讀取下一行/第一行數據並存放在變量值中
WHILE @@FETCH_STATUS = 0 --是否可繼續執行循環狀態
    BEGIN
        --PRINT @sysname;
        DECLARE @sql nvarchar(max); --sql命令字符串
        SET @sql='USE ['+@sysname+'];';
        --Begin
        
        if (CHARINDEX('_QtxApp', @sysname)>0) --我只須要修更名字包含_QtxApp的數據庫
        begin
            SET @sql+='select * from dbo.Access_token'; --自定義的sql命令
            PRINT @sql;
        end
        else
        begin
            PRINT @sql;
        end
        
        --End
        EXEC(@sql); --執行字符串sql
        
        FETCH NEXT FROM My_Cursor INTO @sysname; --讀取下一行數據並存放在變量值中
    END
CLOSE My_Cursor; --關閉遊標
DEALLOCATE My_Cursor; --釋放遊標
GO

 

結束,歡迎指正。ast

相關文章
相關標籤/搜索