2013-06-26 56 views
0

我有一個qustion請helpmeSQL Server可以,我們同樣給身份科拉姆兩個或多個表

基本上我有兩個表table1table2

table1有兩列:idname

數據是這樣的

id  name   
c01 sukanth   
co2 ram    

table2也列idname

但現在table2id列在table1檢查結束號碼id柱,並開始下一個值

像這樣的事情

id  name   
c03 sukanth   
co4 ram    

和例如,如果table1有結束列c99,然後table2出發idd00do1那樣

請幫幫我。

在這裏,我有表的n個,但相同的ID必須分擔所有表

我想導入Excel文件中的數據到數據庫中。我有n個Excel文件。一個Excel文件中的一個表,但ID應該是唯一的所有表。在excel文件中沒有id列我必須根據以前的文件創建id結尾記錄號

+0

SQL Server 2008中 – srihari

+0

如果是的話,爲什麼要使用標識列實際上???標識列意味着沒有重複的行標識符,並由sql server通過照顧您的** Seeed值**進行管理。在主表上使用標識,但是,在孩子只使用數字列,你必須自己管理。 – 2013-06-26 07:21:27

+0

並非所有的表都是不同的。我想將excel文件數據加載到數據庫中。我有n個excel files.and一個excel文件一個表,但id應該是唯一的所有表。在excel文件中沒有id列我必須根據以前的文件創建id結束記錄號 – srihari

回答

0

因此,您必須自己管理。因爲SQL Server不知道你的要求,如果一個表以1001結尾並從另一個表1002開始新的標識。SQL Server標識語法是IDENTITY [(seed,increment)]這意味着,每當你插入一個新行,它會看到最後一個看到,並按照您在設計表格時設置的值增加它。

所以,如果你想這樣做,那麼, 插入Excel中的所有行到SQL Server。然後,在開始在Next表中插入行之前,獲取上一個表的Seeed的值。然後,您可以使用該值插入。

但這是非常糟糕的解決方案,你知道在我的情況下,我會做的是。 我只是在我的應用程序中設置了一個計數器變量來處理行位置,並且我只是將該值插入到所需的表格中。

無論如何,你想這樣做,你可以刪除該身份屬性。因爲你自己管理如此。

我建議通過以下方式:

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) 
      } 
    } 
} 

我想這樣你可以管理你的soultion。

這是我的建議,只能用Scratch示例。希望你明白爲什麼即時通訊建議你。

+0

可以請給我一個例子如何使用IDENTITY [(種子,增量)]因爲iam新到sqlserver – srihari

+0

看看這個鏈接http://msdn.microsoft.com/en-us/library/aa933196(v=sql.80).aspx其中包含所有的定義和示例。 – 2013-06-26 07:49:28

+0

不是那樣的。例如,我今天將加載一個excel文件,我可以在i \ 1個月後插入另一個excel文件,例如n個excel文件 – srihari

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) 
} 

所以現在拿到上次插入行的標識,使我們可以用它來對另一個表必須是一個開始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

+0

插入到Products1值(LastId,ProductName),但我們無法在身份庫侖中插入任何值 – srihari

+0

這就是爲什麼您使用** SET IDENTITY_INSERT products1 ON **在插入執行該查詢之前。我想你沒有跟着鏈接。請深入瞭解一下在上面的示例中插入語句一樣**插入產品1值(產品名稱)**和另一個**插入到產品1值(LastId,產品名稱)**後SET IDENTITY_INSERT產品1 ON 我認爲你沒有得到該行:**因此在Next表上插入新行 修改表,Identity插入模式,因爲您自己在該表上插入新的Identity。 ** – 2013-06-26 08:20:53

相關問題