2013-01-18 107 views
1

我目前正在處理我的小數據庫項目,但我已遇到問題。我有兩個表,其中生成的腳本張貼在下面,現在我試圖寫一個過程,將首先添加一個記錄到較小的一個,旁邊的第二個使用它的ID從第一個。但是我收到一個錯誤: 「列名或提供的值數量與表定義不匹配。」 嘗試將默認值添加到表格Klienci。 我不知道發生了什麼,因爲沒有列或參數,所以應該沒有問題,至少像這樣。錯誤:提供的值的列名或數量與表定義不匹配

第一個表:

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[KlienciIndywidualni](
    [IDKlientaIndywidualnego] [int] IDENTITY(1,1) NOT NULL, 
    [IDKlienta] [int] NOT NULL, 
    [Imie] [nvarchar](50) NOT NULL, 
    [Nazwisko] [nvarchar](50) NOT NULL, 
    [NumerLegitymacji] [int] NULL, 
    [Adres] [nvarchar](50) NOT NULL, 
    [Miasto] [nvarchar](50) NOT NULL, 
    [KodPocztowy] [nvarchar](50) NOT NULL, 
    [Kraj] [nvarchar](50) NOT NULL, 
    [Telefon] [int] NOT NULL, 
    [Email] [nvarchar](50) NOT NULL, 
CONSTRAINT [PK_KlienciIndywidualni] PRIMARY KEY CLUSTERED 
(
    [IDKlientaIndywidualnego] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,  ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[KlienciIndywidualni] WITH CHECK ADD CONSTRAINT [FK_KlienciIndywidualni_Klienci] FOREIGN KEY([IDKlienta]) 
REFERENCES [dbo].[Klienci] ([IDKlienta]) 
GO 

ALTER TABLE [dbo].[KlienciIndywidualni] CHECK CONSTRAINT [FK_KlienciIndywidualni_Klienci] 
GO 

ALTER TABLE [dbo].[KlienciIndywidualni] WITH CHECK ADD CONSTRAINT [CK_KlienciIndywidualni] CHECK ((len([Telefon])>=(9))) 
GO 

ALTER TABLE [dbo].[KlienciIndywidualni] CHECK CONSTRAINT [CK_KlienciIndywidualni] 
GO 

ALTER TABLE [dbo].[KlienciIndywidualni] WITH CHECK ADD CONSTRAINT [CK_KlienciIndywidualni_mail] CHECK (([Email] like '%@%.[a-z][a-z][a-z]')) 
GO 

ALTER TABLE [dbo].[KlienciIndywidualni] CHECK CONSTRAINT [CK_KlienciIndywidualni_mail] 
GO 

第二個:

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Klienci](
    [IDKlienta] [int] IDENTITY(1,1) NOT NULL, 
CONSTRAINT [PK_Klienci] PRIMARY KEY CLUSTERED 
(
    [IDKlienta] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

步驟:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE dodaj_klienta_indywidualnego 
-- parametry 
@Imie nvarchar(50), 
@Nazwisko nvarchar(50), 
@Adres nvarchar(50), 
@KodPocztowy nvarchar(50), 
@Miasto nvarchar(50) , 
@Kraj nvarchar(50), 
@Telefon int, 
@Email nvarchar(50), 
@NumerLegitymacji nvarchar(50) = null 

AS 
BEGIN 

SET NOCOUNT ON; 
declare @IDKlienta as int; 

begin try 
    begin tran 
    --dodaj klienta 
    INSERT INTO Klienci 
    DEFAULT VALUES 
    set @IDKlienta = @@IDENTITY; 

    --dodaj klienta indywidualnego 
    INSERT INTO KlienciIndywidualni 
    VALUES(@IDKlienta, @Imie, @Nazwisko, @Adres, @Miasto, 
    @KodPocztowy, @Kraj, @Telefon, @Email); 
    COMMIT TRAN 
end try 
begin catch 
    declare @error as varchar(127) 
    set @error = (Select ERROR_MESSAGE()) 
    RAISERROR('Nie mozna dodac osoby-klienta, blad danych. %s', 16, 1, @error); 
    ROLLBACK TRAN 
end catch 
END 
GO 
+0

錯誤是'INSERT INTO KlienciIndywidualni'不是你認爲的線。你錯過了'NumerLegitymacji'。爲其添加參數 - 或者如果您不想在該列中插入任何內容,請使用排除該列的顯式列列表。 –

+0

爲什麼只有一個表格只有一個標識字段?我錯過了什麼嗎? – thursdaysgeek

回答

2

你的第二個插入需要十個參數,你只提供9,如果你跳過NumerLegitymacji字段,那麼你應該指定每個列的名稱,導致現在插入等待是最後一個NOT NULL列。

--dodaj klienta indywidualnego 
    INSERT INTO KlienciIndywidualni (
    IDKlienta, 
    Imie, 
    Nazwisko, 
    Adres, 
    Miasto, 
    KodPocztowy, 
    Kraj, 
    Telefon, 
    Email 
) 
    VALUES(@IDKlienta, @Imie, @Nazwisko, @Adres, @Miasto, 
    @KodPocztowy, @Kraj, @Telefon, @Email); 
    COMMIT TRAN 
+0

'NumerLegitymacji'實際上允許'NULL',但這是無關緊要的。如果不包括列列表,則必須爲除計算/身份列之外的所有列提供值。 –

+0

花了2小時工作在這個問題上,我甚至沒有想到答案是如此簡單。這條線錯誤讓我只是看着第一張桌子插入。謝謝你們的幫助。現在它工作正常。 – Dcortez

+0

如果我找到了你的答案,那麼他應該寫出將在我的答案中寫入的值。 – MuhammadHani

相關問題