SQL Server可以为两个或多个表提供标识列

时间:2013-06-26 07:11:01

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

我有一个qustion请帮助

基本上我有两个表table1table2

table1有两列:idname

和数据是这样的

id      name        
c01    sukanth        
co2    ram            

table2idname

但现在table2 id列必须检查idtable1列的结尾编号并开始下一个值

像这样的东西

id      name         
c03    sukanth         
co4    ram             

例如,如果table1有结尾列c99,那么table2 id d00do1就像那样

请帮帮我。

这里我有n个表,但所有表必须共享相同的id

我想将Excel文件数据导入数据库。我有n个Excel文件。一个Excel文件一个表但id应该对所有表都是唯一的。在excel文件中没有id列我必须根据以前的文件结束记录号

创建id

2 个答案:

答案 0 :(得分:0)

为此,你必须自己管理。因为SQL Server不知道您的要求,如果一个表以1001结束并在另一个表上从1002开始新标识.SQL Server标识语法是 IDENTITY [(种子,增量)] 这意味着什么,每当你插入一个新行时,它会看到一个Last Seeeed ,并在设计你的表时按照你之前设置的值递增它。

所以,如果你想这样做,那么, 将所有行从Excel插入SQL Server。然后,在开始在Next表中插入行之前,获取上一个表的Last Seeed 值。然后,您可以使用该值进行插入。

但这是非常糟糕的解决方案你知道在我的情况下我会做的是。 我只是在我的应用程序中设置了一个计数器变量来处理行位置,我只需在需要的表中插入该值。

无论如何,您想要这样做,您可以删除该Identity Property。因为你自我管理所以。

我建议采用以下方式:

Int RowNum=0
Foreach (Excel doc){
   Foreach (Rows in doc)
     {
        RowNum++;
        Fields1=val ...n
        If data is something 
           {
               Insert into Table 1 values(RowNum,Fields...n)
           }

        If data is something else
           {
               Insert into Table 2 values(RowNum,Fields...n)
           }
     }
}

我认为你可以通过这种方式管理你的灵魂。

这是我的建议,只有Scratch的例子。希望你明白为什么我这样建议你。

答案 1 :(得分:0)

所以,你想要你的脏话。

这正是你所看到的。

好的,现在看看这个。

假设您有一个类似于以下的表:

CREATE TABLE products1 (id int IDENTITY, product varchar(40))
CREATE TABLE products2 (id int IDENTITY, product varchar(40))

确定。所以现在您将Excel中的记录插入到Product1表中。喜欢

Int LastId=0

Foreach (Rows from ExcelDoc1){
    ProductName=ExcelColumn
    Insert into Products1 values(ProductName)
}

现在获取Last Inserted Row的标识符,以便我们可以将其用于另一个必须是起始ID的表,如下所示:

LastId= Select isnull(Max(ID),0)+1 as NextId from Products1
So now you have an Last Identity on LastID

So Before Inserting an new row on the Next table
Modify that tables, Identity Insert Mode, Because you are self inserting an new Identity on that table. 

SET IDENTITY_INSERT products1 ON

Foreach (Rows from ExcelDoc2){
    ProductName=ExcelColumn
    Insert into Products1 values(LastId,ProductName)
    LastId++
} 

Again reset that Setting so that, you dont have to insert an identity value yourslef.
 SET IDENTITY_INSERT products1 OFF

完成!!!

若有,请查看此链接:http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx