试试这个呢?EXEC sp_addlinkedserver
'Test', --名称
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=服务器名;UID=sa;PWD=密码;'
GO
-------以上为添加连接服务器select * from Test.库名.dbo.表名
'Test', --名称
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=服务器名;UID=sa;PWD=密码;'
GO
-------以上为添加连接服务器select * from Test.库名.dbo.表名
'Test', --名称
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=服务器名;UID=sa;PWD=密码;'
GOselect * from Test.库名.dbo.sysobjects where ....
txlicenhe(不做技术高手) 提供了如何连接不同机器名的数据库方法。和我的意思不一样。
if exists (select * from master..sysprocesses where hostname = remoteservername)
if exists (select * from master.dbo.sysservers where srvname = 'Test')
EXEC sp_dropserver 'Test' EXEC sp_addlinkedserver
'Test', --名称
'',
'SQLOLEDB',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=peter;UID=sa;PWD=;'select * from Test.Northwind.dbo.Categories
会报错:
服务器: 消息 18456,级别 14,状态 1,行 1
用户 'sa' 登录失败。
[OLE/DB provider returned message: Invalid connection string attribute]2、 tj_dns(愉快的登山者)
sysprocesses中不存在的hostname不能说明它不能使用。3、 liuyun2003(流云——小小菜鸟)
是我的意思。但就算实际连一次,@@error也是没有机会在系统自己报错之前取到值的。
使用联结服务器:
EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
--加上登陆
exec sp_addlinkedsrvlogin @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO
然后你就可以如下:
if exists(select * from 别名.库名.dbo.表名)
print '存在'
else
print '不存在'
如果压根连不上,是不能正确读取sysobjects数据的。2、另外一个问题是
LocalServer=A,LocalUser=myuser,
RemoteServer=B,RemoteUser=sa,联结服务器,登陆后:
LocalServer以SA身份可以正常读取(select)RemoteServer数据的,而myuser却不能。但只要SA读取(select)过一次,myuser就正常了。
我的登录这样写的:
exec sp_addlinkedsrvlogin @rmtsrvname='别名',@useself='false'
GO