Sqlserver使用遊標迴圈,一個sql查詢出所有linked server伺服器上的某個job資訊
結論:如果想要在一臺伺服器上,cursor查詢所有linked server的上的某些資訊,把linked server名稱[DB123]當成變數時無法使用如下方式
select COUNT(*) from [msdb].[dbo].[sysjobs][DB123]
select COUNT(*) from [DB123].[msdb].[dbo].[sysjobs]
即
'select COUNT(*) from [msdb].[dbo].[sysjobs]'+quotename(@servername)
'select COUNT(*) from '+quotename(@servername)+'.[msdb].[dbo].[sysjobs]'
只能是如下
EXECUTE ('select COUNT(*) from [msdb].[dbo].[sysjobs] where name like ''DBA - Restore%''') AT [DB123]
'EXECUTE (''select name from [msdb].[dbo].[sysjobs] where name like ''''DBA - Restore%'''''') AT ' + QUOTENAME(@ServerName)
程式碼如下:
DECLARE @ServerName varchar(200) --宣告變數,使用者接收迴圈時的變數
--定義遊標
DECLARE RunPerServer CURSOR FOR
SELECT LogicalName FROM [server].List WHERE TypeID = 1
--開啟遊標
OPEN RunPerServer
FETCH NEXT FROM RunPerServer INTO @ServerName --從遊標裡取出資料賦值到宣告的變數中
IF OBJECT_ID('tempdb.dbo.#DBAjobscount1') IS NOT NULL
DROP TABLE #DBAjobscount1
CREATE TABLE #DBAjobscount1 (
servername NVARCHAR(128) not NULL,
job_count INT NULL
)
IF OBJECT_ID('tempdb.dbo.#DBAjobsname1') IS NOT NULL
DROP TABLE #DBAjobsname1
CREATE TABLE #DBAjobsname1 (
servername NVARCHAR(128) not NULL,
job_name NVARCHAR(128) NULL
)
WHILE @@FETCH_STATUS = 0 --返回被FETCH語句執行的最後遊標的狀態,0表示fetch語句成功,1表示fetch語句失敗,2表示被提取的行不存在
BEGIN
BEGIN TRY
declare @jobcount int
declare @jobname varchar(200)
declare @sql1 varchar(8000) = 'EXECUTE (''select COUNT(*) from [msdb].[dbo].[sysjobs] where name like ''''DBA - Restore%'''''') AT ' + QUOTENAME(@ServerName)
declare @sql2 varchar(8000) = 'EXECUTE (''select name from [msdb].[dbo].[sysjobs] where name like ''''DBA - Restore%'''''') AT ' + QUOTENAME(@ServerName)
print @sql1
print @sql2
IF OBJECT_ID('tempdb.dbo.#DBAjobsname') IS NOT NULL
DROP TABLE #DBAjobsname
IF OBJECT_ID('tempdb.dbo.#DBAjobscount') IS NOT NULL
DROP TABLE #DBAjobscount
CREATE TABLE #DBAjobscount (job_count INT NULL)
CREATE TABLE #DBAjobsname (job_name NVARCHAR(128) NULL)
insert into #DBAjobscount exec(@sql1)
insert into #DBAjobsname exec(@sql2)
insert into #DBAjobscount1 select @ServerName,job_count from #DBAjobscount
insert into #DBAjobsname1 select @ServerName,job_name from #DBAjobsname
DROP TABLE #DBAjobscount
DROP TABLE #DBAjobsname
print 'The cursor successfully fetched a restore job'
END TRY
BEGIN CATCH
PRINT 'Could not get jobs for server: ' + @ServerName + ' Error: ' + ERROR_MESSAGE()
print @ServerName
END CATCH
FETCH NEXT FROM RunPerServer INTO @ServerName
END
CLOSE RunPerServer --關閉遊標
DEALLOCATE RunPerServer --撤銷遊標
select a.servername,b.job_name from #DBAjobscount1 a inner join #DBAjobsname1 b on a.servername=b.servername and a.job_count>0
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2846074/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sqlserver使用遊標迴圈查詢所有sqlserver error日誌帶有Exception的報錯SQLServerErrorException
- 如何查詢某個資料表中除某個欄位的所有資訊???
- SQLSERVER查詢某個資料庫有幾張表SQLServer資料庫
- SQL Server 2014如何使用遊標迴圈向遠端資料庫插入資料SQLServer資料庫
- SQL2008查詢某資料庫中的某個值是否存在SQL資料庫
- SQL Server在所有表中查詢(在整個庫搜尋內容)SQLServer
- SQLServer查詢所有資料庫大小SQLServer資料庫
- Sql查詢 一個表中某欄位的資料在另一個表中某欄位中不存在的SQL
- SQL Server 查詢資料庫中所有表資料條數SQLServer資料庫
- Sqlserver 如何truncate linked server的表SQLServer
- SqlServer遞迴查詢SQLServer遞迴
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊一(zt)ROSSQLServer優化
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- 分享一個查詢某個使用者過去一段時間內執行的SQL語句。SQL
- SQL Server 連結伺服器(Linked Servers)SQLServer伺服器
- 一個SQL查詢連續三天的流量100以上的資料值【SQql Server】SQLServer
- Linux查詢某個目錄下每個子目錄的所有檔案數量Linux
- sqlserver建立linked server到redshift的方法SQLServer
- SQL SERVER 2012查詢資料庫和所有表的大小方法彙總SQLServer資料庫
- 一個免費的 Whois 資訊查詢介面
- Oracle顯示遊標的使用及遊標for迴圈Oracle
- SQL Server 跨資料庫查詢SQLServer資料庫
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊二(zt)ROSSQLServer優化
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊三(zt)ROSSQLServer優化
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- sqlserver的waitresource等待事件是linked server連結伺服器的問題SQLServerAI事件伺服器
- sql資料庫查詢某列中每種資訊出現次數並降序排列SQL資料庫
- 使用MASA Blazor開發一個標準的查詢表格頁Blazor
- 記一個實用的sql查詢語句SQL
- SQL 獲取SQL Server中兩個日期之間的所有日期SQLServer
- 二分查詢—包括查詢第一個目標元素和最後一個目標元素
- 查詢固定條數的某個值之和
- 查詢git某個分支是誰建立的Git
- SQLSERVER跨伺服器查詢SQLServer伺服器
- 查詢使用者登入資訊sqlSQL
- 分別使用while迴圈、do…while迴圈和for迴圈輸出1~100之間的所有偶數While
- Sql Server 的引數化查詢SQLServer
- 幾個SQL查詢小技巧SQL