2010-06-23 24 views
33

Chcę móc programowo (w T-SQL) sprawdzić, czy określony serwer połączony już istnieje dla mojego bieżącego serwera i bazy danych (tak, że jeśli łącze jeszcze nie istnieje, mogę go utworzyć). Próbowałem rzeczy takie jak to:Serwer SQL: Czy istnieje test "IF EXISTS" dla połączonego serwera?

IF OBJECT_ID('myserver\devdb_1') IS NULL 
BEGIN 
    PRINT 'Does not exist, need to create link' 
    EXEC master.dbo.sp_addlinkedserver @server = N'myserver\devdb_1', @srvproduct=N'SQL Server' 
END 
ELSE 
    PRINT 'Link already exists' 

Ale test OBJECT_ID zawsze zwraca wartość null, nawet jeśli łącze już istnieje. W jaki sposób można to sprawdzić w T-SQL, aby reszta kodu mogła założyć, że łącze istnieje?

Odpowiedz

67

Przyjazd sys.servers:

if not exists(select * from sys.servers where name = N'myserver\devdb_1') 
16
IF NOT EXISTS (SELECT TOP (1) * FROM sysservers WHERE srvname = 'myserver\devdb_1') 
+0

Zasadniczo, prawie taka sama odpowiedź jak Remus Ruşanu, ja w górę głosowali ci obie, ale dało mu czek na tym linku. ;-) –

+0

kudos @Ogre Psalm33;) –

+0

Interesujące. Jaka jest różnica między 'sysservers' i' sys.servers'. Zauważyłem, że nazwy kolumn są różne! – seebiscuit

Powiązane problemy