2016-11-09 72 views
0

因此,我试图根据电子邮件地址是否存在于数据库中而将子查询的结果转换为参数。一旦找到它,我希望它将找到的行的ID设置为@ID并删除该行。但是,我收到以下错误:SQL错误:“子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式。”不知道如何修复

“子查询未使用EXISTS引入时,只能在选择列表中指定一个表达式。”

我已经搜索了高和低的答案,但我来空。我究竟做错了什么?我该如何解决它?

随时留下任何建议,我可以做得更好。谢谢!

DECLARE @EmailAddr varchar(255) 
DECLARE @ID int 
DECLARE @Email_Text varchar(max) 

SET @EmailAddr = (SELECT TOP 1 Email FROM tempdb.dbo.WarrantyAnniversaryEmail) 
WHILE (SELECT COUNT(Email) FROM tempdb.dbo.WarrantyAnniversaryEmail WHERE Email = @EmailAddr) > 0 
BEGIN 

    SET @Email_Text = @Email_Text + ';' + (SELECT TOP 1 Id, [First] + ' ' + [Last] as FullName, @EmailAddr, Company, Phone, [Address] + ', ' + City + ', ' + [State] + ' ' + Zip as FullAddress 
     FROM tempdb.dbo.WarrantyAnniversaryEmail 
     WHERE Email = @EmailAddr) 
    SET @ID = (SELECT TOP 1 Id FROM tempdb.dbo.WarrantyAnniversaryEmail WHERE Email = @EmailAddr) 
    DELETE FROM tempdb.dbo.WarrantyAnniversaryEmail WHERE Id = @ID 
    PRINT @Email_Text 
END 
+0

错误信息的哪个方面没有得到? –

回答

2

你的问题显然是这一行:

SET @Email_Text = (@Email_Text + ';' + 
        (SELECT TOP 1 Id, [First] + ' ' + [Last] as FullName, @EmailAddr, Company, Phone, [Address] + ', ' + City + ', ' + [State] + ' ' + Zip as FullAddress 
        FROM tempdb.dbo.WarrantyAnniversaryEmail 
        WHERE Email = @EmailAddr 
        ) 
       ); 

子查询,选择多列,开始id。在此上下文中使用的子查询是“标量子查询”,它只能返回一列(最多一行)。

我不确定你想要回来,所以很难做出更具体的建议。

+0

本质上,我只是想返回一串由分号分隔的文本(通过电子邮件排序)到我拥有的Python脚本。 – expenguin

+0

现在我想到了,是否可以返回一列包含所有列的列,类似于如何对首字母和姓氏进行连接? – expenguin

+0

是的,这工作!感谢您的建议! – expenguin

相关问题