我尝试附加文件,它不起作用。
#1 楼
您有两个选项:选项A:使用“生成脚本”选项在兼容模式下对数据库进行脚本编写:
注意:如果您使用模式和数据对数据库进行脚本编写,具体取决于您的数据量很大,该脚本将非常庞大,并且无法由SSMS,sqlcmd或osql处理(也可能以GB为单位)。
选项B:
首先脚本化具有所有索引,FK等的表,并在目标数据库中创建空白表-仅使用SCHEMA(无数据)选项。
使用BCP插入数据
使用以下脚本bcp删除数据。在文本模式下设置SSMS并将以下脚本生成的输出复制到bat文件中。
-- save below output in a bat file by executing below in SSMS in TEXT mode
-- clean up: create a bat file with this command --> del D:\BCP\*.dat
select '"C:\Program Files\Microsoft SQL Server0\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
+ QUOTENAME(DB_NAME())+ '.' /* Current Database */
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'
+ QUOTENAME(name)
+ ' out D:\BCP\' /* Path where BCP out files will be stored */
+ REPLACE(SCHEMA_NAME(schema_id),' ','') + '_'
+ REPLACE(name,' ','')
+ '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
from sys.tables
where is_ms_shipped = 0 and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
/*and schema_name(schema_id) <> 'unwantedschema' */ /* Optional to exclude any schema */
order by schema_name(schema_id)
运行将在以下文件夹中生成.dat文件的bat文件:您已指定。
再次在文本模式下使用SSMS在目标服务器上运行以下脚本。
--- Execute this on the destination server.database from SSMS.
--- Make sure the change the @Destdbname and the bcp out path as per your environment.
declare @Destdbname sysname
set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
select 'BULK INSERT '
/*Remember Tables must be present on destination database */
+ QUOTENAME(@Destdbname) + '.'
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID))
+ '.' + QUOTENAME(name)
+ ' from ''D:\BCP\' /* Change here for bcp out path */
+ REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '')
+ '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )'
+ char(10)
+ 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... '''
+ char(10) + 'go'
from sys.tables
where is_ms_shipped = 0
and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
order by schema_name(schema_id)
使用SSMS运行输出以插入数据返回表中。
这是非常快速的bcp方法,因为它使用纯模式。
评论
非常有帮助-方法B对我有用(方法A生成的SQL为7GB,而SSMS却没有)。某些SSID和链接服务器无法正常使用,但是什么时候第一次与链接服务器有关?不确定我是否会在生产中使用此功能,但是对于使测试环境快速达到95%的情况而言,这是完美的。
–野牛
2014年12月4日上午8:45
@aucuparia某些SSID和链接的服务器未正确传递。链接的服务器必须手动编写脚本。可以使用sp_helprevlogin传送SSID。 SQLAgent作业,ssis软件包等应根据您的需要进行移动。此方法的目的是在降级或合并2个数据库时尽快获取数据。
–金沙(Kin Shah)
2014年12月4日15:12
选项B是唯一对我有用的方法,因为生成的脚本在其他方面过大
–JumpingJezza
18-09-26在8:36
我希望我可以不止一次投票!在我发现这个答案之前,浪费了数小时试图获取数据。非常感谢
–阿夫罗洪·伊斯洛尔(Avrohom Yisroel)
20年1月6日在21:30
#2 楼
不,你不能后退,只能前进。您可以在2008年创建一个空数据库,然后使用Management Studio中的“生成脚本”向导来编写架构和数据的脚本(或Red Gate和其他公司的第三方比较工具)。确保将正确的目标版本设置为2008,并且必须充实2012年可能使用的不兼容的内容(例如OFFSET或FORMAT)。#3 楼
由于SQL Server不允许这种兼容性,因此没有受支持的方法。您可以做的是在SQL上
还原数据库。 2012
为对象和数据生成脚本
从SQL 2012的所有详细信息中清除脚本
在2008上执行脚本
如果您没有SQL然后,您可以使用Server 2012使用第三方工具来读取备份并提取数据和结构。
在这种情况下,只需在SQL 2008上创建空数据库,并使用ApexSQL Diff和ApexSQL Data Diff等工具来同步对象和数据。您也可以从其他主要供应商(例如Red-Gate或Idera)中找到这些产品。
评论
签出这些参考文献将对您有所帮助:msdn.microsoft.com/zh-cn/library/ms140052.aspxdba.stackexchange.com/questions/5511/…谢谢还有一个与此问题相同的问题,并且得到很好的回答:superuser.com/questions/468578/…
对于此问题(迁移,而不是备份/还原),有一个很好的解决方案:stackoverflow.com/questions/19837886/…