SQL Subquery возвратил более 1 значение при добавлении процедуры - PullRequest
0 голосов
/ 16 мая 2018

Я попытался создать процедуру в SQL Server, чтобы можно было передать значение users_id в другую таблицу.

Однако при заполнении данных asp.net возвращает ошибку, что подзапрос вернул более 1 значения.Вот моя процедура:

CREATE PROCEDURE [dbo].[insert_rent]
    @comment_info NVARCHAR(MAX),
    @booth_size NVARCHAR(MAX),
    @customer_type NVARCHAR(MAX),
    @booth_type NVARCHAR(MAX),
    @customer_email TEXT,
    @customer_mobile TEXT
AS
    DECLARE @Users_Id INT 

    IF EXISTS (SELECT Id FROM Users)
    BEGIN
        SET @Users_Id = (SELECT Id FROM Users)

        INSERT INTO Rent (rent_comments, booth_size, customer_type, booth_type, customer_email, customer_mobile, Users_id) 
        VALUES (@comment_info, @booth_size, @customer_type, @booth_type, @customer_email, @customer_mobile, @Users_Id)
    END

Вот мой код:

String CS = ConfigurationManager.ConnectionStrings["BoothsConnectionString1"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
    SqlCommand cmd = new SqlCommand("insert_rent", con);
    cmd.CommandType = CommandType.StoredProcedure;

    con.Open();
    cmd.Parameters.Add("@comment_info", SqlDbType.NVarChar).Value = comment_input.Text;
    cmd.Parameters.Add("@booth_size", SqlDbType.NVarChar).Value = size_dropwdown.SelectedValue.ToString();
    cmd.Parameters.Add("@customer_type", SqlDbType.NVarChar).Value = customer_type_dropdown.SelectedValue.ToString();
    cmd.Parameters.Add("@booth_type", SqlDbType.NVarChar).Value = booth_type_dropdown.SelectedValue.ToString();
    cmd.Parameters.Add("@customer_email", SqlDbType.NVarChar).Value = customer_email.Value;
    cmd.Parameters.Add("@customer_mobile", SqlDbType.NText).Value = customer_mobilenumber.Value;

    cmd.ExecuteNonQuery();

Я вполне уверен, что с моей процедурой что-то не так.

1 Ответ

0 голосов
/ 16 мая 2018

Вы проверяете наличие любого идентификатора в Users.

if exists(select Id from Users)

Это всегда будет верно, если в вашей таблице есть хотя бы одна строка.

На следующем шаге вы пытаетесь установить значение переменной:

set @Users_Id = (select Id from Users)

Но без примерки WHERE вы получите все идентификаторы, которые содержит ваша таблица Users.

Использование подвыбора для задания переменной требует скалярного результата.

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