2013-06-26 3 views
0

У меня есть один qustion пожалуйста HelpMeSQL Server мы можем так же предоставить удостоверение Колум для двух или более таблиц

В принципе у меня есть две таблицы table1 и table2

table1 имеет две колонки: id и name

и данные подобны этому

id  name   
c01 sukanth   
co2 ram    

table2 также столбцы id и name.

Но теперь table2id столбца должен проверить номер окончания id колонок в table1 и начать следующее значение

Что-то вроде этого

id  name   
c03 sukanth   
co4 ram    

и, например, если table1 имеет окончание столбца c99, то table2 запуск id: d00 или do1 такой

Пожалуйста, помогите мне.

Здесь я п число таблиц, но тот же идентификатор должен делиться для всех таблиц

Я хочу, чтобы импортировать файл данных Excel в базу данных. У меня есть n файлов Excel. И один файл Excel одна таблица, но идентификатор должен быть уникальным для всех таблиц. в файле excel нет столбца id. Мне нужно создать идентификатор в соответствии с предыдущим номером записи файла

+0

SQL Server 2008 – srihari

+0

Если так, то, почему вы используете столбца идентификации, на самом деле ??? Identity Column означает отсутствие дубликата строки Идентификатор и управляется сервером sql, заботясь о вашем ** См. Значение **. Используйте идентификатор на главной таблице, но, в случае с ребенком просто используйте числовой столбец, и вам нужно управлять собой для этого. –

+0

нет все разные таблицы. Я хочу загрузить данные Excel в базу данных. У меня есть n файлов excel и один файл excel для одной таблицы, но идентификатор должен быть уникальным для всех таблиц. в файле excel нет столбца id, я должен создать идентификатор в соответствии с предыдущим файлом, заканчивающимся номером записи – srihari

ответ

0

Для этого вам нужно управлять собой. Поскольку SQL Server не знает о вашем требовании, если одна таблица закончилась с 1001 и начнет новую идентификацию в другой таблице с 1002. Синтаксис идентификатора SQL Server равен ИДЕНТИФИКАЦИЯ [(семя, приращение)] Это означает, что каждый раз, когда вы вставьте новую строку, чтобы увидеть последний Seeeed и Increment it по значению, которое вы установили ранее при разработке своей таблицы.

Итак, если вы хотите сделать это, то Вставьте все строки из Excel в SQL Server. Затем, прежде чем начинать вставлять строки в следующую таблицу, Get the Last 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 new для sqlserver – srihari

+0

Взгляните на это link http://msdn.microsoft.com/en-us/library/aa933196(v=sql.80).aspx Содержит все определение и примеры. –

+0

нет подобный. например, я буду загружать один файл excel сегодня, я могу вставить еще один файл excel после i \ one month, как это n число файлов excel. – srihari

0

Итак, вы хотите свой Грязный путь.

Это именно то, что вы искали.

Итак, взгляните на это сейчас.

Пусть вас есть таблица вроде следующего:

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

Ok. Итак, теперь вы вставляете запись из 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 

DONE !!!

Если что-нибудь Взгляните на эту ссылку: http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx

+0

Вставить в значения Products1 (LastId, ProductName), но мы не можем вставить какое-либо значение в идентификатор coulmn – srihari

+0

Вот почему вы used ** SET IDENTITY_INSERT products1 ON ** Перед вставкой выполнить этот запрос. Думаю, вы тоже не пошли по ссылке. Пожалуйста, внимательно ознакомьтесь с этим. Вставить инструкцию в приведенный выше пример One Like ** Вставить в значения Products1 (ProductName) **, а другой - ** Вставить в значения Products1 (LastId, ProductName) ** после SET IDENTITY_INSERT products1 ON Я думаю, что вы тоже не получили эту строку: ** So Before Вставка новой строки в следующую таблицу Измените эти таблицы, режим Insert Identity, потому что вы сами вставляете новый Identity в эту таблицу. ** –