我想從不同的服務器獲取數據,並且服務器名稱可能會更改。所以我將服務器名稱設置爲參數。我的SQL存儲過程的想法是這樣的使服務器名稱作爲變量
CREATE PROCEDURE [dbo].[GetData]
@ServerName
AS
BEGIN
SELECT * FROM @ServerName.ClientDataBase.dbo.Client
END
有誰知道如何做到這一點?
的數據庫版本是SQL Server 2005中
我想從不同的服務器獲取數據,並且服務器名稱可能會更改。所以我將服務器名稱設置爲參數。我的SQL存儲過程的想法是這樣的使服務器名稱作爲變量
CREATE PROCEDURE [dbo].[GetData]
@ServerName
AS
BEGIN
SELECT * FROM @ServerName.ClientDataBase.dbo.Client
END
有誰知道如何做到這一點?
的數據庫版本是SQL Server 2005中
使用動態SQL,但是邪惡的,這可能是:在使用同義字(詞)
創建(從MSDN)語法
exec('select * from ' + @ServerName + '.ClientDatabase.dbo.Client')
看:
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>
<object> :: =
{
[ server_name.[ database_name ] . [ schema_name_2 ].|
database_name . [ schema_name_2 ].| schema_name_2. ] object_name
}
你可以設置一個鏈接服務器,說「BOB」。
然後,您可以調用sp_setnetname來更改底層目標服務器,但保留名稱BOB。
所以,你的代碼是:
CREATE PROCEDURE [dbo].[GetData]
@ServerName
AS
BEGIN
EXEC sp_setnetname 'BOB', @ServerName
SELECT * FROM BOB.ClientDataBase.dbo.Client
END
-- Proc to get remove server name (domaine+instance name)
IF OBJECT_ID('dbo.getRemoteName') IS NOT NULL
DROP PROC dbo.getRemoteName;
GO
CREATE PROC dbo.getRemoteName
@id AS INT,
@RETURN AS VARCHAR(100) OUTPUT
AS
BEGIN
DECLARE @GetInstances TABLE
(id INT IDENTITY(0,1),
VALUE NVARCHAR(100),
instanceName NVARCHAR(100),
DATA NVARCHAR(100))
INSERT INTO @GetInstances
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@KEY = 'SOFTWAREMicrosoftMicrosoft SQL Server',
@value_name = 'InstalledInstances'
-- order ascendant
-- Select * from @GetInstances -- uncomment to see all the instances that your have
SELECT @RETURN=instanceName FROM @GetInstances WHERE [email protected] ORDER BY instanceName ASC;
SET @RETURN=HOST_NAME()+''[email protected];
END;
GO
DECLARE @RETURN AS VARCHAR(100);
-- get the instance number 0
EXEC getRemoteName 0, @RETURN OUTPUT;
PRINT @RETURN;
--
exec('SELECT * FROM ['[email protected]+'].RemoteDatabase.dbo.SampleTable');
好idea- Works的服務器名稱 – gbn 2009-04-17 11:28:53
數量有限在我看來,無論是CREATE SYNONYM和sp_setnetname建議在這裏可能有意想不到的後果因爲這些操作具有全球效應。也就是說,如果兩個此類操作重疊,則一個或兩個操作可能會失敗,並使服務器配置處於不一致狀態。 – 2010-04-16 18:51:55