簡體   English   中英

SQL Stored-Proc使用參數作為服務器名稱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM