C#和SQL - 为多个表生成脚本的优雅方式

时间:2013-12-04 11:42:53

标签: c# sql sql-server-2008-r2

我在我的应用程序中处理数据库同步。这意味着我有5个数据库,但是:

    只能在第一个数据库产品中添加/删除/修改
  • 此第一个数据库保存有关已添加/删除/修改的产品到表格的信息(标志1/2/3为添加/编辑/删除和产品ID)

  • 所以第一个数据库从SELECT生成INSERT脚本,例如:

在我的product_changes表中(addedRemovedEdited INT,productID INT)我有信息:

1,15(1 - 标志表示添加了ID = 15的产品)或

2,15(2 - 标志意味着ID = 15的产品被编辑)等。

现在使用这些信息我可以创建脚本 - 并且存在问题。

在这个妈妈我创建脚本,如:

SELECT (col1, col2, col3,...) FROM Product_Category;
string query = "INSERT INTO Table VALUES (@a,@b,@c)...";
SELECT (col1,col2,col3,...) FROM Product_price;
query += "INSERT INTO .......";

我需要在foreach表中包含有关单个产品的信息。因此,对于10个产品,我将有10 * 12(12个,因为有大约12个表关于一个产品)代码块,如INSERT INTO表1(....);插入表2(....)。

问题还在于,所有数据都需要在每个数据库中具有相同的ID - 所以我使用@@ identity并将其放入插入查询中。它必须是这种方式,因为ID = 10的产品在mainDB中名为'Keyboard'=在DB10中ID = 10的产品。

问题 - 也许你们中的一些人知道更好(因为那个不太好)解决方案我该如何创建这些脚本?就像查询一样,它将从我的字符串[] a = {“Product”,“Product_price”,“Product_category”}表中获取所有信息并生成INSERT查询,但最重要的是 - 我可以添加@@ identity。

@EDIT:我忘了。我找到了解决方案:how i can generate programmatically "insert into" data script file from a database table?

嗯,它确实生成脚本,但具有自动递增的ID。我需要以正确的顺序添加信息(如中间表),例如:

INSERT INTO Product(.....) VALUES (...);
SET @pID = @@identity FROM Product;

INSERT INTO Price (priceID,.....) VALUES (...);
SET @prID = @@identity FROM Price;

INSERT INTO Product_price (priceID, productID,...) VALUES (@prID, @pID)

0 个答案:

没有答案