您的位置:首页 > 数据库

SQL Server 跨库复制表数据的解决办法

2011-05-27 11:38 281 查看
转自:/article/5084569.html

跨库复制表数据,有很多种方法,最常见的是写程序来批量导入数据了,但是这种方法并不是最优方法,今天就用到了一个很犀利的方法,可以完美在SqlServer2005和SqlServer2008中执行!

格式如下:

insert
into
tableA
SELECT
*
FROM
OPENDATASOURCE(
'SQLOLEDB'
,
'DataSource=127.0.0.1;UserID=sa;Password=sasasa'
).databaseName.dbo.tableB
找到这个方法后,准备执行,可是却并不太顺利,跨库复制表数据的途中,接连出现两个错误,第一个错误:

SQLServerblockedaccesstoSTATEMENT'OpenRowset/OpenDatasource'ofcomponent'AdHocDistributedQueries'becausethiscomponentisturnedoffaspartofthesecurityconfigurationforthisserver.Asystemadministratorcanenabletheuseof'AdHocDistributedQueries'byusingsp_configure.Formoreinformationaboutenabling'AdHocDistributedQueries',see"SurfaceAreaConfiguration"inSQLServerBooksOnline.

翻译:

SQLServer阻止了对组件'AdHocDistributedQueries'的STATEMENT'OpenRowset/OpenDatasource'的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure启用'AdHocDistributedQueries'。有关启用'AdHocDistributedQueries'的详细信息,请参阅SQLServer联机丛书中的"外围应用配置器"。

解决办法:

启用AdHocDistributedQueries:

viewsourceprint?

exec
sp_configure
'showadvancedoptions'
,1
reconfigure
exec
sp_configure
'AdHocDistributedQueries'
,1
reconfigure
待插入完成后再关闭AdHocDistributedQueries:

viewsourceprint?

exec
sp_configure
'AdHocDistributedQueries'
,0
reconfigure
exec
sp_configure
'showadvancedoptions'
,0
reconfigure
错误2:

Anexplicitvaluefortheidentitycolumnintable'cms_TagSubject'canonlybespecifiedwhenacolumnlistisusedandIDENTITY_INSERTisON.

这个真的很纠结,没办法,只有google了,之后发现可以在执行的SQL语句前后加上:

viewsourceprint?

SET
IDENTITY_INSERTtableA
ON
--执行的SQL
SET
IDENTITY_INSERTtableB
ON
试过之后,发现这个方法并不能解决,无奈,最后找了半天,在国外论坛找到了解决办法,就是,要写查入列的详细信息

解决办法:

insertintotableA(column1,column2.....)
SELECT*FROM
OPENDATASOURCE('SQLOLEDB','DataSource=127.0.0.1,3422;UserID=sa;Password=sasasa;').databaseName.dbo.tableB


终于大功告成,另外,利用这种方法,还是可以直接从Excel里面查询的,呵呵,真强大:

SELECT*FROMOPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel8.0;IMEX=1;HDR=YES;DATABASE=D:/a.xls',[sheet1$])

跨库复制表数据,一种很好的方法,呵呵,希望能对大家有所帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐