【问题标题】:Update table schema with columns from other table schema使用其他表模式中的列更新表模式
【发布时间】:2013-01-29 02:46:47
【问题描述】:

我正在开发一种数据迁移工具。当用户将字段添加到 UI 中的实体时,数据库架构本身会更新。这会在尝试移动数据时造成严重破坏。

我目前有一个包含所有源数据的临时表,但该临时表可能包含目标表没有的额外列。有没有办法用另一个表(在这种情况下是临时表)中的模式来更新表模式?表上有约束和索引,所以不能只选择一个新表然后重命名为旧表。

我正在使用 .NET 4.0(所以没有 SMO),但 SQL 解决方案很好。

【问题讨论】:

    标签: .net sql sql-server sql-server-2008


    【解决方案1】:

    我建议在存储过程中为此使用动态 SQL。

    您要做的是找出临时表的架构。假设您创建了一个名为 #nameoftemptable 的临时表,这应该有助于您开始:

    SELECT t.name, c.name as colname, types.name, types.max_length
    FROM tempdb.sys.tables t 
       JOIN tempdb.sys.columns c on t.object_id = c.object_id
       JOIN sys.types on c.system_type_id = types.system_type_id
    WHERE t.name like '#nameoftemptable%'
    

    注意“tempdb”的使用——这是存储临时表的地方。这将返回临时表中的所有列及其数据类型。

    接下来,您需要为类似的查询返回相同的数据,但不是查询 tempdb,而是查询您的数据库名称和表名:

    SELECT t.name, c.name as colname, types.name, types.max_length
    FROM dbname.sys.tables t 
       join dbname.sys.columns c on t.object_id = c.object_id
       join dbname.sys.types on c.system_type_id = types.system_type_id
    where t.name = 'TableName'
    

    现在您应该能够比较哪些列是新列并相应地使用ALTER TABLE 命令。

    希望这会有所帮助,祝你好运。

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 2019-05-23
      • 2020-10-18
      • 1970-01-01
      相关资源
      最近更新 更多