简体   繁体   English

存储过程未插入所有行

[英]Stored procedure not inserting all the rows

For a school project we need to make a web application. 对于学校项目,我们需要制作一个Web应用程序。 One of the features should be that you can import a .csv file and all the rows should get inserted into the right tables, except if (in this case) a song or artist already exists. 功能之一应该是您可以导入.csv文件,并且所有行都应插入到正确的表中,除非(在这种情况下)歌曲或歌手已经存在。 The .csv file consists of 2000 rows which should always be inserted into a different table. .csv文件由2000行组成,应始终将其插入其他表中。 The code runs, however only 137 rows are actually inserted. 该代码运行,但是实际上仅插入了137行。 Here is my code: 这是我的代码:

BEGIN
SET NOCOUNT ON;

IF EXISTS(SELECT naam FROM Artiest WHERE naam = @artiest)
PRINT NULL;
ELSE
INSERT INTO Artiest(naam) VALUES (@artiest);
END
BEGIN
SET NOCOUNT ON;

IF EXISTS(SELECT titel FROM Song WHERE titel = @titel AND artiestid = (SELECT artiestid FROM Artiest WHERE naam = @artiest))
PRINT NULL;
ELSE
INSERT INTO Song(artiestid, titel, jaar) VALUES ((SELECT TOP(1) artiestid FROM Artiest WHERE naam = @artiest), @titel, @jaar);
END
BEGIN
SET NOCOUNT ON;

IF EXISTS (SELECT TOP(1) songid FROM Lijst WHERE songid = (SELECT TOP(1) songid FROM Song WHERE titel = @titel AND artiestid = (SELECT artiestid FROM Artiest WHERE naam = @artiest)))
AND EXISTS (SELECT TOP(1) top2000jaar FROM Lijst WHERE top2000jaar = @top2000jaar)
PRINT null;
ELSE
INSERT INTO Lijst (songid, top2000jaar, positie, uitzendDatum, van, tot) VALUES ((SELECT TOP(1) songid FROM Song WHERE titel = @titel AND artiestid = (SELECT artiestid FROM Artiest WHERE naam = @artiest)), @top2000jaar, @positie, @eindzenddatum, @van, @tot);
END

Hope someone can help me with this one, because I am a newb when it comes to SQL 希望有人可以帮助我解决这个问题,因为在SQL方面我是个新手

I have simplified the sql to make it more readable, 我简化了sql,使其更具可读性,

BEGIN
    SET NOCOUNT ON;

    DECLARE @artiestID INT,
            @SongID INT

    SELECT @artiestID = artiestid FROM Artiest WHERE naam = @artiest

    IF @artiestID IS NULL
    BEGIN
        INSERT INTO Artiest(naam) VALUES (@artiest);
        SELECT @artiestID = @@IDENTITY
    END

    SELECT @SongID = songid FROM Song WHERE titel = @titel AND artiestid = @artiestID

    IF @SongID IS NULL
    BEGIN
        INSERT INTO Song(artiestid, titel, jaar) VALUES (@artiestID, @titel, @jaar);
        SELECT @SongID = @@IDENTITY
    END

    IF NOT EXISTS (SELECT 1 FROM Lijst WHERE songid = @SongID) OR NOT EXISTS (SELECT 1 top2000jaar FROM Lijst WHERE top2000jaar = @top2000jaar)
        INSERT INTO Lijst (songid, top2000jaar, positie, uitzendDatum, van, tot) VALUES (@SongID, @top2000jaar, @positie, @eindzenddatum, @van, @tot);
END

Verify your data for the reasong why the target table having less number of records. 验证您的数据以了解为什么目标表的记录数较少。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM