2012-01-28 3 views
0

Мне нужно развернуть мое приложение VB.NET, разработанное в VB.NET и Visual Studio 2005. Клиент использует SQL Server 2008, а приложение создается с SQL Server 2000.Вставка утверждений не выполняется при запуске с SQL Server 2008

я получил следующее сообщение об ошибке от SQL Server 2008:

явное значение для столбца идентификаторов в таблице «Outgoing_Invoice» может быть указан только тогда, когда список столбцов используется и Идентичность Вставка включена

Вот мой запрос для вставки данных в двух таблицах:

Dim cmd1 As New SqlCommand("Insert into Stock values(@invoice_no, @gate_pass, @exp_no, @clm_no, @category, @item_name, @weight, @units_case, 0, 0, @crtns_removed, @pieces_removed, 0, 0, @date_added, @date_removed, @inc_total_price, @out_total_price, @discount, @amount, 'Sold', @expiry_date) Insert into Outgoing_Invoice values(@invoice_no, @exp_no, @party_name, @party_code, @city, @contact, @category, @item_name, @weight, @units_case, @crtns_issued, @pieces_issued, @crtns_removed, @pieces_removed, 0, 0, @scheme, @unit_price, @out_total_price, @discount, @amount, @date_removed, @expiry_date, @order_booker, @salesman)", con) 

Сообщение об ошибке показывает на cmd1.executenonquery. Обе эти таблицы Stock и Outgoing_Invoice имеют идентификационный столбец, помеченный как серийный, до @invoice.

Проблема возникла только в том случае, если в SQL Server 2008 была опробована вставка. При работе с SQL Server 2000 она работает должным образом.

Какая возможная причина для этой проблемы и как ее можно решить?

ответ

4

Ваш INSERT запрос должен указать имена столбцов до пункта VALUES иначе они будут попытки для того столбца, как это определено в БД (который подлежит изменению - это не фиксированы).

С момента получения сообщения об ошибке, похоже, что пытается вставить в столбец идентификатора.

В общем - если не вставляя в все столбцов, вы должны указать имена столбцов. Я бы всегда указать имена столбцов в качестве лучшей практики.

Итак - указать список столбцов:

INSERT INTO aTable 
(col1, col2) 
VALUES 
(@val1, @val2) 
+2

@ user944591 - Вы не можете положиться на заказ (ответ обновлен). Если вы не вставляете в _all_ столбцы, вы должны ** указать имена столбцов. – Oded

2

Вкладыш в Outgoing_Invoice имеет один ко многим параметрам.

Это будет работать нормально. Значения 1 и 2 относятся к C1 и C2, а идентификатор присваивается автоматически.

declare @T table 
(
    ID int identity, 
    C1 int, 
    C2 int 
) 

insert into @T values (1, 2) 

Это даст точную ошибку у вас есть

insert into @T values (1, 2, 3) 

Проверьте структуру таблицы в SQL Server 2000. Это, вероятно, одно дополнительное поле. Это объясняет, почему он работает там.

0

Вы должны явно указать список полей, если хотите изменить/вставить значения столбца IDENTITY таблицы.

Т.е. ваш запрос должен выглядеть так:

Insert into Stock 
(
    here, 
    comes, 
    your, 
    real, 
    column, 
    names 
) 
values 
(
    @invoice_no, 
    @gate_pass, 
    @exp_no, 
    @clm_no, 
    @category, 
    @item_name, 
    @weight, 
    @units_case, 
    0, 
    0, 
    @crtns_removed, 
    @pieces_removed, 
    0, 
    0, 
    @date_added, 
    @date_removed, 
    @inc_total_price, 
    @out_total_price, 
    @discount, 
    @amount, 
    'Sold', 
    @expiry_date 
) 

Insert into Outgoing_Invoice 
(
    here, 
    comes, 
    your, 
    real, 
    column, 
    names, 
    too 
) 
values 
(
    @invoice_no, 
    @exp_no, 
    @party_name, 
    @party_code, 
    @city, 
    @contact, 
    @category, 
    @item_name, 
    @weight, 
    @units_case, 
    @crtns_issued, 
    @pieces_issued, 
    @crtns_removed, 
    @pieces_removed, 
    0, 
    0, 
    @scheme, 
    @unit_price, 
    @out_total_price, 
    @discount, 
    @amount, 
    @date_removed, 
    @expiry_date, 
    @order_booker, 
    @salesman 
) 
Смежные вопросы