我尝试在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();
我相当确定我的手术有问题。
答案 0 :(得分:0)
您正在检查Users
中是否存在任何ID。
if exists(select Id from Users)
只要表格中至少有一行,这将永远为真。
在下一步中,您尝试将变量设置为值:
set @Users_Id = (select Id from Users)
但如果没有合适的WHERE
,您将获得表Users
所包含的所有ID。
使用子选择设置变量需求标量结果。