SQL Server 子查询返回了超过 1 个值(请帮助我)
本文关键字:个值 帮助 Server 查询 返回 SQL | 更新日期: 2023-09-27 17:55:31
我在下面给出的代码可以帮助我为什么它显示这种类型的错误" SQL Server Subquery返回了超过1个值。当子查询跟在 =、!=、<、<= 、>、>= "
create procedure [dbo].[ManageClientContacts]
(
@ClientId int,
@FirstName nvarchar(255)=null,
@LastName nvarchar(255)=null,
@City nvarchar(255)=null,
@State nvarchar(255)=null,
@Country nvarchar(255)=null,
@PostalCode nvarchar(255)=null,
@ContactName nvarchar(255)=null,
@ContactNumber nvarchar(255)=null,
@Email nvarchar(255)=null,
@ContactEmail nvarchar(255)=null
)
as
begin
If((select ClientId from [dbo].[tblClientContactDetails])<>@ClientId or (select ClientId from [dbo].[tblClientContactDetails]) is null )
begin
Insert into [dbo].[tblClientContactDetails]
(
ClientId ,FirstName ,LastName,City ,State ,Country ,PostalCode ,ContactName ,ContactNumber ,Email,ContactEmail,InsertedDate)
values (
@ClientId ,@FirstName ,@LastName,@City ,@State ,@Country ,@PostalCode ,@ContactName ,@ContactNumber ,@Email,@ContactEmail,getdate())
end
else
begin
Update [dbo].[tblClientContactDetails] set
ClientId=@ClientId
,FirstName=@FirstName
,LastName=@LastName
,City=@City
,[State]=@State
,Country=@Country
,PostalCode=@PostalCode
,ContactName=@ContactName
,ContactNumber=@ContactNumber
,Email=@Email
,ContactEmail=@ContactEmail
,UpdatedDate=getdate()
where ClientId=@ClientId
end
end
RETURN 0
错误是不言自明的,您的子查询返回多个记录,其中预期返回单个值。
查看您的查询
select ClientId from [dbo].[tblClientContactDetails]
这将返回存储在表中的所有clientId
,您可能不想要,因此请像这样更改查询
select ClientId from [dbo].[tblClientContactDetails] where ClientId = @ClientId
所以你的if
条件将是
If((select ClientId from [dbo].[tblClientContactDetails] where ClientId = @ClientId)<>@ClientId or (select ClientId from [dbo].[tblClientContactDetails] where ClientId = @ClientId) is null )
您的查询
select ClientId from [dbo].[tblClientContactDetails])<>@ClientId
因为@ClientId
可以保存一个查询,而select ClientId from [dbo].[tblClientContactDetails])
返回多个记录,因此 Sql 服务器引擎与我应该比较 @ClientId
值的结果集的哪个值混淆,并最终导致错误。
修改查询,使其仅返回一条记录,您就完成了。
您使用
的查询返回了多个值。可能在您的查询中,您只期望一个值。但它返回了多个值。在您的情况下,我认为有多个具有相同客户端 ID 的记录或查询是错误的
这里的问题出在这一行:
If((select ClientId from [dbo].[tblClientContactDetails])<>@ClientId or (select ClientId from [dbo].[tblClientContactDetails]) is null )
此条件需要一个返回值,在您的情况下,它返回多个值,因此 SQL Server 无法处理此值。
更改查询的方式是,它根据查询中的条件返回单个值,您将完成。
希望这有帮助。
更改行
If((select ClientId from [dbo].[tblClientContactDetails])<>@ClientId or (select ClientId from [dbo].[tblClientContactDetails]) is null )
对此
If not exists
(
select * from [dbo].[tblClientContactDetails] where ClientId = @ClientId
)
将查询更新为:
CREATE PROCEDURE [dbo].[ManageClientContacts]
(
@ClientId int,
@FirstName nvarchar(255)=null,
@LastName nvarchar(255)=null,
@City nvarchar(255)=null,
@State nvarchar(255)=null,
@Country nvarchar(255)=null,
@PostalCode nvarchar(255)=null,
@ContactName nvarchar(255)=null,
@ContactNumber nvarchar(255)=null,
@Email nvarchar(255)=null,
@ContactEmail nvarchar(255)=null
)
AS
BEGIN
IF NOT EXISTS( SELECT ClientId FROM [dbo].[tblClientContactDetails] WHERE ClientID = @ClientId)
--This checks if record is not present for given client id then insert new record
BEGIN
--Here in Insert statement pass ClientID only if you dont set ClientID as Primary key with auto-increment
INSERT INTO [dbo].[tblClientContactDetails]
(
ClientId ,FirstName ,LastName,City ,State ,Country ,PostalCode ,ContactName ,ContactNumber ,Email,ContactEmail,InsertedDate)
VALUES (
@ClientId ,@FirstName ,@LastName,@City ,@State ,@Country ,@PostalCode ,@ContactName ,@ContactNumber ,@Email,@ContactEmail,getdate()
)
END
ELSE
BEGIN
UPDATE [dbo].[tblClientContactDetails]
SET
FirstName=@FirstName
,LastName=@LastName
,City=@City
,[State]=@State
,Country=@Country
,PostalCode=@PostalCode
,ContactName=@ContactName
,ContactNumber=@ContactNumber
,Email=@Email
,ContactEmail=@ContactEmail
,UpdatedDate=getdate()
WHERE ClientId=@ClientId
END
END
请让我知道,这对你有用吗?