Sql 子查询错误,不允许返回超过1个值
在我的数据库中,我有一个名为Sql 子查询错误,不允许返回超过1个值,sql,sql-server-2008,Sql,Sql Server 2008,在我的数据库中,我有一个名为studentEmailAddresses的表,我想获取每个电子邮件地址,并创建一个长字符串来保存所有电子邮件地址,以便可以在我的sp\u send\u dbmail函数中使用 例如,我有两个电子邮件地址Test1@hotmail.com和Test2@hotmail.com所以在子查询的末尾,我想要一个类似于Test1@hotmail.com; Test2@hotmail.com;。下面显示了我是如何尝试执行此操作的,但我收到以下错误消息子查询返回的值超过1。当子查询
studentEmailAddresses
的表,我想获取每个电子邮件地址,并创建一个长字符串来保存所有电子邮件地址,以便可以在我的sp\u send\u dbmail
函数中使用
例如,我有两个电子邮件地址Test1@hotmail.com
和Test2@hotmail.com
所以在子查询的末尾,我想要一个类似于Test1@hotmail.com; Test2@hotmail.com;代码>。下面显示了我是如何尝试执行此操作的,但我收到以下错误消息子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。
Declare @emailList varchar (1000)
set @emailList = (Select coalesce(emailAdd + ';', ' ')
from studentEmailAddresses)
Print @emailList
试试这个:
Declare @emailList varchar (1000) = ''
Select @emailList += coalesce(emailAdd + ';', ' ')
from studentEmailAddresses
Print @emailList
试试这个:
Declare @emailList varchar (1000) = ''
Select @emailList += coalesce(emailAdd + ';', ' ')
from studentEmailAddresses
Print @emailList
错误是因为您正在使用SET
进行变量赋值。从查询赋值时,SET只能赋值一个标量值。如果查询返回多个值/行,那么SET将引发错误(这里就是这种情况)SELECT
将为变量指定一个值,并隐藏返回多个值的事实(因此您可能永远不知道其他地方出错的原因)。您可以将查询编写为:
Declare @emailList varchar (1000)
SET @emailList =
(select emailAdd+ ';' AS 'data()'
FROM @studentEmailAddresses
FOR XML PATH('') )
错误是因为您正在使用SET
进行变量赋值。从查询赋值时,SET只能赋值一个标量值。如果查询返回多个值/行,那么SET将引发错误(这里就是这种情况)SELECT
将为变量指定一个值,并隐藏返回多个值的事实(因此您可能永远不知道其他地方出错的原因)。您可以将查询编写为:
Declare @emailList varchar (1000)
SET @emailList =
(select emailAdd+ ';' AS 'data()'
FROM @studentEmailAddresses
FOR XML PATH('') )
在SQL Server中:
Declare @emailList varchar (1000)
SET @emailList=''
Select @emailList = @emailList + coalesce(emailAdd + ';', ' ')
from studentEmailAddresses
Print @emailList
DECLARE emailList VARCHAR(1000);
SET emailList='';
SELECT CONCAT(emailList, emailAdd, '; ') INTO emailList
FROM studentEmailAddresses;
SELECT emailList FROM DUAL;
在MySQL中:
Declare @emailList varchar (1000)
SET @emailList=''
Select @emailList = @emailList + coalesce(emailAdd + ';', ' ')
from studentEmailAddresses
Print @emailList
DECLARE emailList VARCHAR(1000);
SET emailList='';
SELECT CONCAT(emailList, emailAdd, '; ') INTO emailList
FROM studentEmailAddresses;
SELECT emailList FROM DUAL;
注意,DUAL在MySQL中是一个虚拟表,或者您可以简单地选择emailList作为
SELECT emailList;
谢谢。在SQL Server中:
Declare @emailList varchar (1000)
SET @emailList=''
Select @emailList = @emailList + coalesce(emailAdd + ';', ' ')
from studentEmailAddresses
Print @emailList
DECLARE emailList VARCHAR(1000);
SET emailList='';
SELECT CONCAT(emailList, emailAdd, '; ') INTO emailList
FROM studentEmailAddresses;
SELECT emailList FROM DUAL;
在MySQL中:
Declare @emailList varchar (1000)
SET @emailList=''
Select @emailList = @emailList + coalesce(emailAdd + ';', ' ')
from studentEmailAddresses
Print @emailList
DECLARE emailList VARCHAR(1000);
SET emailList='';
SELECT CONCAT(emailList, emailAdd, '; ') INTO emailList
FROM studentEmailAddresses;
SELECT emailList FROM DUAL;
注意,DUAL在MySQL中是一个虚拟表,或者您可以简单地选择emailList作为
SELECT emailList;
谢谢。打印状态没有返回结果,这可能是因为de@emailList默认为空。我编辑得很好!如果答案解决了您的问题,请接受答案。可能是因为de@emailList默认为空,所以打印状态不会返回任何结果。我编辑得很好!如果它解决了你的问题,请接受答案