添加过程时,SQL子查询返回的值超过1

时间:2018-05-16 14:07:47

标签: sql-server tsql stored-procedures

我尝试在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 :(得分:0)

您正在检查Users中是否存在任何ID。

if exists(select Id from Users)

只要表格中至少有一行,这将永远为真。

在下一步中,您尝试将变量设置为值:

set @Users_Id = (select Id from Users)

但如果没有合适的WHERE,您将获得表Users所包含的所有ID。

使用子选择设置变量需求标量结果。