0

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

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

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

4

1 回答 1

0

我建议在存储过程中为此使用动态 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-01-29T03:09:57.303 回答