Sql server Insert Into with subquery将多行插入数据库
目前,我正在努力生成一个“通知”查询以正确工作 我正在处理一个查询,该查询将向一个表中添加一个字符串,该表将同时添加多行,其中只有一列将在“批量插入”中更改: 我目前有:Sql server Insert Into with subquery将多行插入数据库,sql-server,subquery,insert-into,Sql Server,Subquery,Insert Into,目前,我正在努力生成一个“通知”查询以正确工作 我正在处理一个查询,该查询将向一个表中添加一个字符串,该表将同时添加多行,其中只有一列将在“批量插入”中更改: 我目前有: public static void addNotification(string notification) { SqlConnection scon = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"
public static void addNotification(string notification)
{
SqlConnection scon = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
using (SqlCommand scmd = new SqlCommand())
{
scmd.Connection = scon;
scmd.CommandType = CommandType.Text;
scmd.CommandText = "INSERT INTO notificationAck (Email, Notification, isAcknowledged) VALUES ((SELECT Email FROM AspNetUsers), '" + notification + "' ,0)";
scon.Open();
int status = scmd.ExecuteNonQuery();
scon.Close();
}
}
但是,在传递类似“this is a notification”的字符串时,会出现以下错误:
子查询返回了多个值。这是不允许的,因为
子查询后面是=,!=,=或者当子查询用作
表情。声明已终止
那么,有人能解释一下这个查询应该如何运行吗
该表包含以下列:
我知道“PK1”不是最好的实践,但这只是一个用于测试目的的表(它设置为自动递增)
因此,isAcknowledged应该设置为0,通知应该是这个字符串,并且应该从表AspNetUsers?的每一行中选择电子邮件
有人能给我解释一下我应该如何将这些数据添加到数据库中吗?类似的方法应该可以:
scmd.CommandText = "INSERT INTO notificationAck (Email,
Notification,
isAcknowledged)
SELECT Email, '" + notification + "', 0
FROM AspNetUsers";
插入选择
不需要值
。因此,您只需使用一个SELECT
语句,从AspNetUsers
中检索Email
字段,再加上两个常量值。类似的操作应该可以:
scmd.CommandText = "INSERT INTO notificationAck (Email,
Notification,
isAcknowledged)
SELECT Email, '" + notification + "', 0
FROM AspNetUsers";
插入选择
不需要值
。因此,您只需使用SELECT
语句,从AspNetUsers
检索Email
字段加上两个常量值。在使用查询生成结果时,您不希望使用值。您可以将INSERT
查询更改为:
INSERT INTO notificationAck (Email, Notification, isAcknowledged)
SELECT Email, 'SOME STRING', 0 FROM AspNetUsers
翻译成代码的代码如下所示:
scmd.CommandText = "INSERT INTO notificationAck (Email, Notification, isAcknowledged)
SELECT Email, '" + notification + "', 0 FROM AspNetUsers";
在使用查询生成结果时,您不希望使用值。您可以将INSERT
查询更改为:
INSERT INTO notificationAck (Email, Notification, isAcknowledged)
SELECT Email, 'SOME STRING', 0 FROM AspNetUsers
翻译成代码的代码如下所示:
scmd.CommandText = "INSERT INTO notificationAck (Email, Notification, isAcknowledged)
SELECT Email, '" + notification + "', 0 FROM AspNetUsers";
你的问题
SELECT Email FROM AspNetUsers
按照错误指示返回多行。您需要更改它,使其仅返回一行,例如:
SELECT TOP 1 Email FROM AspNetUsers
然后按如下所示更改您的命令
scmd.CommandText = "INSERT INTO notificationAck (Email, Notification, isAcknowledged) SELECT TOP 1 Email " + notification + "' ,0 FROM AspNetUsers'";
如果要插入多行,请从查询中删除前1行
scmd.CommandText = "INSERT INTO notificationAck (Email, Notification, isAcknowledged) SELECT Email " + notification + "' ,0 FROM AspNetUsers'";
你的问题
SELECT Email FROM AspNetUsers
按照错误指示返回多行。您需要更改它,使其仅返回一行,例如:
SELECT TOP 1 Email FROM AspNetUsers
然后按如下所示更改您的命令
scmd.CommandText = "INSERT INTO notificationAck (Email, Notification, isAcknowledged) SELECT TOP 1 Email " + notification + "' ,0 FROM AspNetUsers'";
如果要插入多行,请从查询中删除前1行
scmd.CommandText = "INSERT INTO notificationAck (Email, Notification, isAcknowledged) SELECT Email " + notification + "' ,0 FROM AspNetUsers'";
如果只想插入一行,请在子查询中选择Top 1
试一试
如果要插入AspNetUsers中的所有行,请使用
如果只想插入一行,请在子查询中选择Top 1
试一试
如果要插入AspNetUsers中的所有行,请使用
插入选择
不需要值
:插入选择
不需要值
:感谢您的及时回复。我没有意识到我必须将表名放在末尾,这也造成了一个问题。所以谢谢你:)谢谢你的及时回复。我没有意识到我必须将表名放在末尾,这也造成了一个问题。所以谢谢你:)谢谢你的解释。重申我也说过的话,我没有意识到我必须将表名放在语句的末尾,而不是在it@jbutler483不客气。还请注意,您应该使用SqlParameter
对象来代替notification
变量。您的代码易于SQL注入。管理员控件仅在此处:)工作正常!!谢谢你的解释。重申我也说过的话,我没有意识到我必须将表名放在语句的末尾,而不是在it@jbutler483不客气。还请注意,您应该使用SqlParameter
对象来代替notification
变量。您的代码易于SQL注入。管理员控件仅在此处:)工作正常!!谢谢你的回答。但是,我需要为返回的每封电子邮件插入。谢谢您的回答。但是,我需要为返回的每封电子邮件插入。谢谢您的回答。但是,我需要为每个返回的电子邮件插入。好的。看来我误解了你的问题。你当然是对的。谢谢你的回答。但是,我需要为每个返回的电子邮件插入。好的。看来我误解了你的问题。你当然是对的。