MSSQL資料庫伺服器上有很多類似的資料庫,需要將這些資料庫統一修改其中的某些表或者某些命令,那麼就會想到用游標來遍歷。 先來說思路: 1,首先需要查詢出所有的資料庫; select [name] from [master].[dbo].[sysdatabases] order by [name]; ...
MSSQL資料庫伺服器上有很多類似的資料庫,需要將這些資料庫統一修改其中的某些表或者某些命令,那麼就會想到用游標來遍歷。
先來說思路:
1,首先需要查詢出所有的資料庫;
select [name] from [master].[dbo].[sysdatabases] order by [name]; --查詢MSSQL中所有資料庫名稱
2,用游標CURSOR來集合查詢出來的資料庫名稱集合,來實現迴圈遍歷每一個資料庫;
3,在迴圈遍歷每一個資料庫名稱時,通過拼接sql語句來實現命令字元串,並且用EXEC執行命令;
註意:可以根據個人需要對資料庫名稱進行篩選。
代碼示例如下:
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
結束,歡迎指正。