Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Vollqualifizierte Tabellennamen mit SP_ExecuteSql für den Zugriff auf den Remoteserver

Dies müssen Sie tun, es kann nicht parametrisiert werden

....
SET @Sql = 'UPDATE ' + @server_name_param + '.dba_sandbox.dbo.SomeTable SET SomeCol=''data'''
....

Bearbeiten:Es gibt einen anderen Weg, den ich in meinen reinen DBA-Tagen verwendet habe

EXEC sp_setnetname 'AdhocServer', @SERVER_NAME
UPDATE AdhocServer.dba_sandbox.dbo.SomeTable SET SomeCol 'data'
EXEC sp_setnetname 'AdhocServer', 'MeaninglessValue'

sp_setnetname gibt es von SQL Server 2000 bis 2008

Bearbeiten2. Berechtigungen :

Versuchen Sie EXECUTE AS LOGIN = 'login_name' , wobei login_name ein Superuser ist

Ich habe das nicht wirklich benutzt (ich benutze "AS USER" zum Testen), also bin ich mir der Feinheiten nicht sicher ...

Bearbeiten 3:Für Parallelität sollten Sie die Verwendung von sp_getapplock und einer gespeicherten Prozedur oder eines anderen Mechanismus zur Steuerung der Parallelität in Betracht ziehen.