Подзапрос в SQL Сервер вернул более 1 значения - PullRequest
0 голосов
/ 23 марта 2020

Я сделал хранимую процедуру в SQL SERVER. Когда я вызываю хранимую процедуру в приложении c#, возникает следующая ошибка: Подзапрос возвратил более 1 значения. Это недопустимо, когда подзапрос следует =,! =,,> = Или когда подзапрос используется в качестве выражения

. Я не понимаю, почему возникает эта ошибка, потому что я возвращаю 1 одиночное значение INT.

ALTER PROCEDURE [dbo].[spToevoegenUitslag]
    @intPersoonID INT,
    @intPersoonIDSnelsteRonde INT,
    @intPersoonIDPolePosition INT,
    @intGrandPrixID INT,
    @intPuntenID INT,
    @intSeizoenID INT,
    @intID INT = NULL
AS
BEGIN
    --Toevoegen punten van uitslag GrandPrix
    SELECT @intID = COUNT(ID) + 1 FROM tblPuntenCoureur

    INSERT INTO tblPuntenCoureur (ID, PersoonID, GrandPrixID, PuntenID, SeizoenID)
    VALUES (@intID, @intPersoonID, @intGrandPrixID, @intPuntenID, @intSeizoenID)

    --Toevoegen deelnemers van de GrandPrix
    SELECT @intID = COUNT(ID) + 1 FROM tblGrandPrixPersoon

    INSERT INTO tblGrandPrixPersoon (ID, GrandPrixID, PersoonID)
    VALUES (@intID, @intGrandPrixID, @intPersoonID)

    IF (SELECT ID FROM tblSnelsteRonde WHERE GrandPrixID = @intGrandPrixID AND SeizoenID = @intSeizoenID) IS NULL
        BEGIN
        SELECT @intID = COUNT(ID) + 1 FROM tblSnelsteRonde
        INSERT INTO tblSnelsteRonde (ID, PersoonID, intPunt, GrandPrixID, SeizoenID)
        VALUES (@intID, @intPersoonIDSnelsteRonde, 1, @intGrandPrixID, @intSeizoenID)
        END

    IF (SELECT ID FROM tblPolePosition WHERE GrandPrixID = @intGrandPrixID AND SeizoenID = @intSeizoenID) IS NULL
        BEGIN
        SELECT @intID = COUNT(ID) + 1 FROM tblPolePosition
        INSERT INTO tblPolePosition (ID, PersoonID, GrandPrixID, SeizoenID)
        VALUES (@intID, @intPersoonIDPolePosition, @intGrandPrixID, @intSeizoenID)
        END

    RETURN 1 --Toevoegen uitslag gelukt
END

c# код

using (SqlCommand cmd = new SqlCommand("spToevoegenUitslag", verbinding))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@intPersoonID", SqlDbType.Int).Value = PersoonID[0];
                cmd.Parameters.Add("@intPersoonIDSnelsteRonde", SqlDbType.Int).Value = PersoonIDSnelsteRonde;
                cmd.Parameters.Add("@intPersoonIDPolePosition", SqlDbType.Int).Value = PersoonIDPolePosition;
                cmd.Parameters.Add("@intGrandPrixID", SqlDbType.Int).Value = GrandPrixID;
                cmd.Parameters.Add("@intPuntenID", SqlDbType.Int).Value = PuntenID[0];
                cmd.Parameters.Add("@intSeizoenID", SqlDbType.Int).Value = SeizoenID;

                var returnParameter = cmd.Parameters.Add("@Return", SqlDbType.Int);
                returnParameter.Direction = ParameterDirection.ReturnValue;

                verbinding.Open();
                cmd.ExecuteNonQuery();
                var result = returnParameter.Value;

                int returnwaarde = int.Parse(string.Format("{0}", result));
                Console.WriteLine(returnwaarde);

                string title = "Resultaat";
                string message = "";

                if (returnwaarde == 1)
                {
                    message = "Uitslag succesvol toegevoegd";
                    MessageBox.Show(message, title);
                }
                verbinding.Close();

1 Ответ

0 голосов
/ 23 марта 2020

(SELECT ID FROM tblSnelsteRonde WHERE GrandPrixID = @intGrandPrixID AND SeizoenID = @intSeizoenID) Этот ваш запрос может вернуть более одного значения, если в таблице более одной строки с данными @intGrandPrixID и @intSeizoenID

Вы можете попробовать что-то вроде (SELECT Count(ID) FROM tblSnelsteRonde WHERE GrandPrixID = @intGrandPrixID AND SeizoenID = @intSeizoenID) == 0 , Если это то, что вы намереваетесь сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...