exec sp_addlinkedserver 'srv_lnk1','','SQLOLEDB','127.0.0.1'
exec sp_addlinkedsrvlogin 'srv_lnk1','false',null,'test',''
exec sp_addlinkedserver 'srv_lnk2','','SQLOLEDB','127.0.0.2'
exec sp_addlinkedsrvlogin 'srv_lnk2','false',null,'test',''
这四条要先执行
exec sp_addlinkedsrvlogin 'srv_lnk1','false',null,'test',''
exec sp_addlinkedserver 'srv_lnk2','','SQLOLEDB','127.0.0.2'
exec sp_addlinkedsrvlogin 'srv_lnk2','false',null,'test',''
这四条要先执行
直接使用exec sp_dropserver 'srv_lnk1','droplogins'就可以了吗?应该放在什么地方比较合适。
select * from srv_lnk1.test.dbo.table1 join srv_lnk.test.dbo.table2 on 条件
不能放在一块执行,放在一块执行就会报错.
此时就无法确定第5条语句的算法,因为 srv_lnk1 链接服务器还没有被建立起来,所以就报错.你在查询分析器中执行一样,要在
select * from srv_lnk1.test.dbo.table1 join srv_lnk.test.dbo.table2 on 条件
前加go,才不会报错.
exec sp_dropserver 'srv_lnk1','droplogins'
不行啊,无论是在select前还是在exec后加go还是不可以,报错:在“go”附近有错误。
System.Data.SqlClient.SqlConnection conn1 = new System.Data.SqlClient.SqlConnection();
conn1.ConnectionString ="server=192.168.2.10;uid=sa;pwd=;database=test";
System.Data.SqlClient.SqlConnection conn2 = new System.Data.SqlClient.SqlConnection();
conn2.ConnectionString ="server=192.168.2.10;uid=sa;pwd=;database=test";
conn1.Open();
conn2.Open();string connstring1 = "exec sp_addlinkedserver 'srv_lnk1','','SQLOLEDB','"+source1.Text+"'"
+"exec sp_addlinkedsrvlogin 'srv_lnk1','false',null,'"+userid1.Text+"','"+pw1.Text+"' "
+"go";
string connstring2 = "exec sp_addlinkedserver 'srv_lnk2','','SQLOLEDB','"+source2.Text+"'"
+"exec sp_addlinkedsrvlogin 'srv_lnk2','false',null,'"+userid2.Text+"','"+pw2.Text+"' "
+"go";System.Data.SqlClient.SqlCommand first1 = new SqlCommand(connstring1,conn1);
first1.ExecuteNonQuery();
System.Data.SqlClient.SqlCommand first2 = new SqlCommand(connstring2,conn2);
first2.ExecuteNonQuery();string compare1 = "go SELECT a.name,b.name,b.length,c.name,b.isnullable "
+"FROM srv_lik1."+database1.Text+"."+"dbo.sysobjects a join "+"srv_lnk1."+database1.Text+".dbo.syscolumns b "
+"on a.id=b.id join srv_lnk1."+database1.Text+".dbo.systypes c "
+"on b.xtype=c.xtype "
+"where a.xtype='U' and a.name in (select b.name from srv_lnk2."+database1.Text+".dbo.sysobjects b where b.xtype='U') "
+"and c.name<>'sysname' and b.name<>'dtproperties'";
System.Data.SqlClient.SqlDataAdapter cadapter1 = new SqlDataAdapter(compare1,conn1);
DataGrid1.DataSource = ds1;
DataGrid1.DataBind();conn1.close();
…… 字符串那里有点乱,不过大体就是这样了。帮忙看看吧。
或许我这么想,算法就有很多问题。有更好的方法吗?
它不是sql语句的一部分.所以你在程序中加go当然错啦.
不要go(查询分析器测试才要)将上面的go去掉它
不要go(查询分析器测试才要)将上面的go去掉它应该就可以了另外,直接用openrowset不好吗?创建了链接服务,使用后马上删除,那和直接用openrowset没有什么区别
我去试试openrowset。
使用openrowset时
SELECT *
FROM OPENROWSET('sqloledb','192.168.2.10';'sa';'','SELECT * FROM test.dbo.syscolumns') a
报错:未能创建 OLE DB 提供程序 'SQLOLEDB' 的实例。
笨哈,怎么回事,按照帮助里的例子做的啊。