[英]SQL Stored-Proc using parameter for server name?
我有一個存儲過程,可從SQL Server獲取所有非系統數據庫名稱:
select name from MySQLServer.master.sys.databases
where name not like ('master')
and name not like ('tempdb')
and name not like ('msdb')
and name not like ('model')
and name not like ('Admin')
我想做的是將服務器名稱作為參數傳遞,因此此proc更可重用:
@servername = 'some passed servername'
select name from @servername.master.sys.databases
where name not like ('master')
and name not like ('tempdb')
and name not like ('msdb')
and name not like ('model')
and name not like ('Admin')
能做到嗎? 我該怎么做?
我可以創建一個像這樣的變量:
DECLARE @serverPointer nvarchar(MAX)
SET @serverPointer = @servername + '.master.sys.databases'
select name from @serverPointer
任何幫助,將不勝感激。
如果您已將服務器鏈接到要查詢的所有SQL Server,這將起作用。 對於要使用的查詢,系統數據庫占用前4個database_id值。 因此,您可以運行以下命令來獲取用戶數據庫:
SELECT '[' + name + ']'
FROM sys.databases
WHERE database_id > 4
綜上所述,您基本上會為proc執行以下操作:
CREATE PROC GetUserDBs
@Server sysname
AS
BEGIN
DECLARE @SQL nvarchar(2000);
SET @SQL = 'SELECT ''['' + name + '']'' FROM [' + @Server + '].master.sys.databases WHERE database_id > 4';
EXECUTE sp_executesql @SQL;
END
GO
declare @servername nvarchar(max)
DECLARE @serverPointer nvarchar(MAX)
declare @qry nvarchar(max)
@serverPointer = @servername + '.master.sys.databases'
set @qry = 'select name from '+@serverPointer
exec sp_executesql @qry
為此,您將需要在存儲過程中創建一個動態查詢,並使用exec命令執行它,下面是幾個示例:
http://www.sqlteam.com/article/introduction-to-dynamic-sql-part-1
http://www.sqlteam.com/article/introduction-to-dynamic-sql-part-2
Declare @query as varchar(1000)
set @query = ''
+ CHAR(10) + ' select name from '+ CAST(@servername AS VARCHAR(15))+'.master.sys.databases'
+ CHAR(10) + 'where name not in (''master'',''tempdb'',''msdb'',''model'',''Admin'')'
--print (@query)
exec (@query)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.