日期:2014-05-17  浏览次数:20378 次

绝对的需要高手,关于批量数据库A复制到数据库B的问题,求大神帮助
数据库A与数据库B结构完全一模一样,

我使用的办法是:生成清空数据的SQL语句

SELECT  'TRUNCATE TABLE ' + NAME FROM  sysobjects s WHERE s.xtype='u'


然后再生成插入数据的语句
SELECT 'INSERT INTO ' + NAME + ' SELECT * FROM ' + '[newdate].dbo.' + NAME FROM sysobjects s WHERE s.xtype='u'--插入数据


生成的TRUNCATE 的SQL语句执行没有问题
但是生成的INSERT INTO 语句有问题,提示错误 IDENTITY_INSERT 为 ON 一类的错误,但是我知道怎么解决,就是加上  IDENTITY_INSERT 表名 on 即可,但是如果这样就必须把表里面的所有字段全部写全了,直接用*不好使,所以想请问我怎么批量生产出来的SQL语句能满足我的需求? 


应该怎么办?我知道如果不用*查询,指定字段的那种插入,就不会报错

我最终要的SQL语句如下,请问我应该怎么写才能动态生成那些字段与表名?
TRUNCATE TABLE 表名
set identity_insert 表名 on 
INSERT INTO 表名 ([FId],[字段1],[字段2],[字段3],[字段4],[字段5]) SELECT [FId],[字段1],[字段2],[字段3],[字段4],[字段5] FROM  [服务名].数据库名.dbo.表名

set identity_insert 表名 off


------解决方案--------------------
动态显式列名
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT  @s = @s + ',' + QUOTENAME(name)
FROM    syscolumns
WHERE   id = OBJECT_ID('表名')
        AND name NOT IN ( '不希望显式的列' )
SET @s = STUFF(@s, 1, 1, '')
EXEC('select '+@s+' from 表名  ')
  

不过我觉得你这样何不把A备份,然后还原成B库呢?