请教关于导入导出时timestamp的问题

Lynn_z123 2015-08-31 05:07:39
需求:将dbA的数据全部导入dbB,表对象,表结构全部相同,1000张表左右。
导入失败,因为基本每张表都包含timestamp列
请问怎么解决?


dbA的很多表的主键丢失了,所以通过程序生成了新的dbB。
dbA的数据没问题,只要数据全部导入到dbB就可以了
...全文
334 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Lynn_z123 2015-09-01
找到了这个 SELECT name FROM sysobjects WHERE type = 'U' order by name Select name FROM syscolumns Where id=Object_Id('AbcAnalysis')‘ 我去写试试
引用 12 楼 Tiger_Zhao 的回复:
    SELECT T.name,
           C.column_id,
           C.name,
           TP.name,
           C.max_length,
           C.precision,
           C.scale
      FROM sys.objects T
      JOIN sys.columns C
        ON C.object_id = T.object_id
      JOIN sys.types TP
        ON TP.user_type_id = C.user_type_id
     WHERE T.type = 'U'
  ORDER BY T.name, C.column_id
谢谢!
回复
Tiger_Zhao 2015-09-01
    SELECT T.name,
C.column_id,
C.name,
TP.name,
C.max_length,
C.precision,
C.scale
FROM sys.objects T
JOIN sys.columns C
ON C.object_id = T.object_id
JOIN sys.types TP
ON TP.user_type_id = C.user_type_id
WHERE T.type = 'U'
ORDER BY T.name, C.column_id
回复
Lynn_z123 2015-09-01
引用 7 楼 Tiger_Zhao 的回复:
可能用的工具不一样。如#5所说, bcp Utility 就自动识别出 timestamp 重新生成了。 又:你所谓的“重建主键”是什么字段类型,不能直接删除重建吗? 用下面的语句取得所有的主键,到EXCEL中用公式合成SQL
WITH T AS (SELECT * FROM sys.objects WHERE type='U')
,C AS (SELECT * FROM sys.columns)
,I AS (SELECT * FROM sys.indexes WHERE is_primary_key=1)
,IC AS (SELECT * FROM sys.index_columns)
SELECT T.name,
       I.name,
       C.name
  FROM I
  JOIN T
    ON T.object_id = I.object_id
  JOIN IC
    ON IC.object_id = I.object_id
   AND IC.index_id = I.index_id
  JOIN C
    ON C.object_id = IC.object_id
   AND c.column_id = IC.column_id
================================== 请教个问题,请问 根据库名取出所有表名 根据 库名和表名 取出表内所有 字段名称和类型 的SQL语句怎么写? 我去写程序跑循环,卡就卡吧,我也只能这样试试了
回复
Lynn_z123 2015-09-01
引用 8 楼 misterliwei 的回复:
[quote=引用 6 楼 Lynn_z123 的回复:] [quote=引用 5 楼 misterliwei 的回复:] 刚刚试了一下,没有问题啊。新数据库中表是新生成的timestamp值。中途并没有报错! 而且根据 bcp Utility描述,也是不导入timestamp值和计算列的啊!
我这边是报错的啊,我用的是里面的导入导出[/quote] 我又试了一下,发现目标库中若要没有表时,导入时会自动新建表,这种情况下是不报错的。 目标库中若已经有了表,则报错。 [/quote] BCP没有用过额。 导入导出的话,如果目标库没有表结构,目标库产生的表还是没有主键的。
回复
Lynn_z123 2015-09-01
引用 7 楼 Tiger_Zhao 的回复:
可能用的工具不一样。如#5所说, bcp Utility 就自动识别出 timestamp 重新生成了。

又:你所谓的“重建主键”是什么字段类型,不能直接删除重建吗?
用下面的语句取得所有的主键,到EXCEL中用公式合成SQL
WITH T AS (SELECT * FROM sys.objects WHERE type='U')
,C AS (SELECT * FROM sys.columns)
,I AS (SELECT * FROM sys.indexes WHERE is_primary_key=1)
,IC AS (SELECT * FROM sys.index_columns)
SELECT T.name,
I.name,
C.name
FROM I
JOIN T
ON T.object_id = I.object_id
JOIN IC
ON IC.object_id = I.object_id
AND IC.index_id = I.index_id
JOIN C
ON C.object_id = IC.object_id
AND c.column_id = IC.column_id


这些语句我不会写,sql这方面我最多就是谢谢多表关联查询更新了。
按照上面的语句在正确的数据库中查出来2581 行,表有900多张。
因为很多表的主键是合并主键,还有很多外键,字段类型都是char decimal 之类的。
如果拼sql的话我是毫无头绪了。


回复
misterliwei 2015-09-01
引用 6 楼 Lynn_z123 的回复:
[quote=引用 5 楼 misterliwei 的回复:] 刚刚试了一下,没有问题啊。新数据库中表是新生成的timestamp值。中途并没有报错! 而且根据 bcp Utility描述,也是不导入timestamp值和计算列的啊!
我这边是报错的啊,我用的是里面的导入导出[/quote] 我又试了一下,发现目标库中若要没有表时,导入时会自动新建表,这种情况下是不报错的。 目标库中若已经有了表,则报错。
回复
Tiger_Zhao 2015-09-01
可能用的工具不一样。如#5所说, bcp Utility 就自动识别出 timestamp 重新生成了。

又:你所谓的“重建主键”是什么字段类型,不能直接删除重建吗?
用下面的语句取得所有的主键,到EXCEL中用公式合成SQL
WITH T AS (SELECT * FROM sys.objects WHERE type='U')
,C AS (SELECT * FROM sys.columns)
,I AS (SELECT * FROM sys.indexes WHERE is_primary_key=1)
,IC AS (SELECT * FROM sys.index_columns)
SELECT T.name,
I.name,
C.name
FROM I
JOIN T
ON T.object_id = I.object_id
JOIN IC
ON IC.object_id = I.object_id
AND IC.index_id = I.index_id
JOIN C
ON C.object_id = IC.object_id
AND c.column_id = IC.column_id
回复
Lynn_z123 2015-09-01
引用 5 楼 misterliwei 的回复:
刚刚试了一下,没有问题啊。新数据库中表是新生成的timestamp值。中途并没有报错!
而且根据 bcp Utility描述,也是不导入timestamp值和计算列的啊!




我这边是报错的啊,我用的是里面的导入导出
回复
misterliwei 2015-08-31
刚刚试了一下,没有问题啊。新数据库中表是新生成的timestamp值。中途并没有报错! 而且根据 bcp Utility描述,也是不导入timestamp值和计算列的啊!
回复
Lynn_z123 2015-08-31
引用 3 楼 lzw_0736 的回复:
1000账表只能用代碼生成代碼了
900多张,接近1000张。 写程序应该很慢啊,里面有差不多一年的测试数据呢。虽然基本都是各种订单什么的,但是估计也会很卡。 我明天写个试试。 不知道有没有其他的方式可以搞定这个问题了
回复
lzw_0736 2015-08-31
1000账表只能用代碼生成代碼了
回复
Lynn_z123 2015-08-31
引用 1 楼 Tiger_Zhao 的回复:
A)导入的时候不选timestamp列,让dbB自动生成一个。 B)用整个数据库备份/恢复 设计失误啊!既然要导入导出,应该用uniqueidentifier类型。
A,请问怎么不选择timestamp列,我用native client到native client的方式,没有看到可以选择列的地方啊。 如果可以选择,1000账表都选择一遍? B,备份恢复,主键仍然是丢失的啊,大概几百张表主键丢失了 第一次碰到这种主键丢失,想到的方法就是导入数据,如果主键能修复也就不需要导入了。 主程序是总公司那边做的,也可以通过主程序生成数据库,所以我想到的就是生成新的空的数据库,将数据导入这个方法了,结果就卡在了导入上。
回复
Tiger_Zhao 2015-08-31
A)导入的时候不选timestamp列,让dbB自动生成一个。
B)用整个数据库备份/恢复
设计失误啊!既然要导入导出,应该用uniqueidentifier类型。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-08-31 05:07
社区公告
暂无公告