2016-04-14 33 views
0

Kayıtlı bir yordamı kullanmak için verilerin eklenmesi gereken birbirine bağlı birkaç tablo var. tablolar şunlardır: bu tablolara veri eklemek içinPaylaşılan kimlik birincil anahtarıyla tablodaki saklı yordamla veri eklerken hata oluştu

create table contactpersoon 
(
    contactpersoonnr integer identity(1,1), 
    klantnr    integer, 
    naam    varchar(50) not null, 
    telefoonnr   varchar(10) not null, 
    emailadres   varchar(50) not null, 

    constraint pk_contactpersoon 
     primary key(contactpersoonnr, klantnr), 
    constraint fk_contactpersoon_klantnr 
     foreign key(klantnr) references klant(klantnr) 
) 

create table klant 
(
    klantnr  integer identity(1,1) primary key, 
    bedrijfsnaam varchar(50) not null 
) 

create table Logins 
(
    GebruikersNaam varchar(30), 
    Wachtwoord  varchar(30), 
    Klantnr   int, 
    MdwNr   int, 

    constraint pk_logID primary key(GebruikersNaam), 
    constraint fk_klantnr foreign key(klantnr) references klant(klantnr), 
    constraint fk_mdwnr foreign key(mdwnr) references medewerker(mdwnr) 
) 

Saklı yordam:

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'spKlantAanmaken') 
    DROP PROCEDURE spKlantAanmaken 
GO 

Create Procedure spKlantAanmaken 
(
    @bedrijfsnaam as varchar(255), 
    @contactnaam as varchar(255), 
    @telnr as integer, 
    @email as varchar(255), 
    @gebruikersnaam as varchar(255), 
    @wachtwoord as varchar(255) 
) 
AS 
Begin transaction 
Declare @klantnr integer 
Declare @contactpersoonnr integer 

Insert into Klant Values (@klantnr, @bedrijfsnaam); 
Insert into contactpersoon values(@contactpersoonnr, @klantnr, @contactnaam, @telnr, @email); 
Insert into Logins values (@gebruikersnaam, @wachtwoord ,@klantnr, NULL); 
Select * from contactpersoon 
    IF @@ERROR <> 0 
    BEGIN 
     ROLLBACK 
     RAISERROR ('Error tijdens uitvoeren van stap 2.', 16, 1) 
     RETURN 
    END 
    COMMIT 
GO 

o ekler bu kimlik değerlerini kullanmak gerekirse bilmiyorum. Ben aşağıdaki hatayı alıyorum bu saklı yordam çalışırsanız :

Msg 213, Level 16, State 1, Procedure spKlantAanmaken, Line 923
Column name or number of supplied values does not match table definition.

yanlış yapıyorum: Ben Ovülden kimlik değerlerini kaldırırsanız

Msg 8101, Level 16, State 1, Procedure spKlantAanmaken, Line 923
An explicit value for the identity column in table 'Klant' can only be specified when a column list is used and IDENTITY_INSERT is ON.

bu hatayı alıyorum?

+0

Çözünürlük bildirimi –

cevap

1

Identity'u kullandığınızda, identity uygulamasının uygulandığı sütunlarınbildiriminde VALUES olması gerekmez. Yani Ayrıca aynı şeyi umut bunu söyleyerek tüm cevapları görünüyor

Insert into Klant (bedrijfsnaam) Values (@bedrijfsnaam) 
Insert into contactpersoon (klantnr, contactnaam, telnr, email) Values (@klantnr, @contactnaam, @telnr, @email) 

içine eklemek çalışıyoruz sütunlar kayıp olduğunu görünüyor

DÜZENLEME

altına sevdiği kodunu düzenlemek Gönderdiğiniz

+1

kod sütunlarını kullanmayın Bir sütun listesi sağlamanız gerekecektir. Bu kod hata verecek – Raj

+0

@Raj İşaret ettiğin için teşekkürler – jamiedanq

+0

Sabit! Çok teşekkürler :) – Rosario

1

Eğer identity sütun var olduğundan, zorunluluk sizin INSERT açıklamada içerisine girmesi için sütunların listesini belirtin ve kimlik sütunu için bir değer arz değil - böyle:

yerine

Insert into Klant Values (@klantnr, @bedrijfsnaam); 

kullanım

Insert into Klant(bedrijfsnaam) Values (@bedrijfsnaam); 

ve tüm için INSERT işlemlerini yapın.

Bu

bir tablo içine bir şey eklemek herhangi zaman için genel kabul görmüş "En İyi Uygulama" - her zaman
açıkça içine ekliyorsanız Tablonuzdaki sütunların listesini belirtmek tavsiye edilir (kaçınmak için can sıkıcı hatalar ve sürprizler).

0

düzenleyin SP

Insert into Klant (bedrijfsnaam) 
Values (@bedrijfsnaam); 
Insert into contactpersoon(klantnr,naam,telefoonnr,emailadres) 
values(@klantnr, @contactnaam, @telnr, @email); 

bu iki satır

0

tanımlamak açıkça INSERT sorguda identity sütunları klantnr, contactpersoonnr kaçının ve insert tablolara identity sütunları hariç, bir sütun listesini sağlayın senin sütun adları:

Aşağıdaki kod sizin durumunuzda çalışacaktır:

Insert into Klant(bedrijfsnaam) Values (@bedrijfsnaam); 

Insert into contactpersoon(klantnr, naam, telefoonnr, emailadres) values(@klantnr, @contactnaam, @telnr, @email); 
0

Tıpkı INSERT deyimi sütun adlarını VE içeriğini belirtmek: Eğer sütun adı listesini belirtmezseniz

INSERT INTO klant (bedrijfsnaam) VALUES ('XYZ'); 

SQL tercüman siz de, kimlik sütunu istiyorum ima . Bu durumda 2 sütun için veri ayarlamak isteyebilirsiniz, ancak sadece ikinci bir hata mesajı veren bir içerik öğesi sağlayın.

İlgili konular