Sql 无法使用where条件更新
我的问题是:Sql 无法使用where条件更新,sql,sql-server-2005,Sql,Sql Server 2005,我的问题是: CREATE PROCEDURE [dbo].[usp_UpdateMenu] @MenuName VARCHAR(100), @MenuType VARCHAR(50), @IsDefault BIT, @PortalID INT, @MenuID INT AS BEGIN IF(@IsDefault = 1) BEGIN UPDATE [dbo].[MENU] set IsDefault = 0 where
CREATE PROCEDURE [dbo].[usp_UpdateMenu]
@MenuName VARCHAR(100),
@MenuType VARCHAR(50),
@IsDefault BIT,
@PortalID INT,
@MenuID INT
AS
BEGIN
IF(@IsDefault = 1)
BEGIN
UPDATE [dbo].[MENU] set IsDefault = 0 where IsDefault= 1 and PortalID=@PortalID,
MenuName =@MenuName,
IsDefault=@IsDefault
MenuType = @MenuType where MenuID=@MenuID
END
ELSE
BEGIN
UPDATE [dbo].[MENU] set
MenuName =@MenuName,
IsDefault=@IsDefault
MenuType = @MenuType
where MenuID=@MenuID
END
END
SET ANSI_NULLS ON
这只是过程的一部分。我知道
中的条件不会像我想尝试的那样使用两次。但无法处理这种情况。谢谢。此查询的格式不正确。试一试
UPDATE [dbo].[MENU]
set IsDefault = 0
WHERE IsDefault= 1
and PortalID=@PortalID
and MenuName =@MenuName
-- and IsDefault=@IsDefault
and MenuType = @MenuType
and MenuID=@MenuID
要与更新的问题保持一致,请执行以下操作:
BEGIN
IF(@IsDefault = 1)
BEGIN
UPDATE [dbo].[MENU] set IsDefault = 0
where IsDefault= 1 and
PortalID=@PortalID and
MenuName =@MenuName and
IsDefault=@IsDefault and
MenuType = @MenuType and
MenuID=@MenuID
END
ELSE
BEGIN
UPDATE [dbo].[MENU] set
MenuName =@MenuName,
IsDefault=@IsDefault,
MenuType = @MenuType
where MenuID=@MenuID
END
END
此查询的格式不正确。试一试
UPDATE [dbo].[MENU]
set IsDefault = 0
WHERE IsDefault= 1
and PortalID=@PortalID
and MenuName =@MenuName
-- and IsDefault=@IsDefault
and MenuType = @MenuType
and MenuID=@MenuID
要与更新的问题保持一致,请执行以下操作:
BEGIN
IF(@IsDefault = 1)
BEGIN
UPDATE [dbo].[MENU] set IsDefault = 0
where IsDefault= 1 and
PortalID=@PortalID and
MenuName =@MenuName and
IsDefault=@IsDefault and
MenuType = @MenuType and
MenuID=@MenuID
END
ELSE
BEGIN
UPDATE [dbo].[MENU] set
MenuName =@MenuName,
IsDefault=@IsDefault,
MenuType = @MenuType
where MenuID=@MenuID
END
END
在UPDATE
语句中不能有多个WHERE
子句。必须将这些条件与和
或或
组合在一起<代码>,
不是组合它们的有效运算符
有关示例,请参见Mattens答案 在UPDATE
语句中不能有多个WHERE
子句。必须将这些条件与和
或或
组合在一起<代码>,
不是组合它们的有效运算符
有关示例,请参见Mattens答案 我想你正在寻找这个:
CREATE PROCEDURE [dbo].[usp_UpdateMenu]
@MenuName VARCHAR(100),
@MenuType VARCHAR(50),
@IsDefault BIT,
@PortalID INT,
@MenuID INT
AS
BEGIN
UPDATE [dbo].[MENU] SET
MenuName = @MenuName,
IsDefault= CASE WHEN PortalID = @PortalID THEN 0 ELSE @IsDefault END,
MenuType = @MenuType
WHERE MenuID=@MenuID
END
如果
PortalID=@PortalID
,它会将IsDefault
的值设置为0
,否则IsDefault
将具有参数值@IsDefault
,我想您正在寻找这个:
CREATE PROCEDURE [dbo].[usp_UpdateMenu]
@MenuName VARCHAR(100),
@MenuType VARCHAR(50),
@IsDefault BIT,
@PortalID INT,
@MenuID INT
AS
BEGIN
UPDATE [dbo].[MENU] SET
MenuName = @MenuName,
IsDefault= CASE WHEN PortalID = @PortalID THEN 0 ELSE @IsDefault END,
MenuType = @MenuType
WHERE MenuID=@MenuID
END
如果
PortalID=@PortalID
,它将IsDefault
的值设置为0
,否则IsDefault
将具有参数@IsDefault
的值。您还可以将goto与标签一起使用:
CREATE PROCEDURE [dbo].[usp_UpdateMenu]
@MenuName VARCHAR(100),
@MenuType VARCHAR(50),
@IsDefault BIT,
@PortalID INT,
@MenuID INT
AS
IF @IsDefault = 1 GOTO Update2
--------
Update1:
--------
UPDATE [dbo].[MENU]
SET
MenuName =@MenuName,
MenuType = @MenuType
where MenuID=@MenuID
GOTO EndProcessing
--------
Update2:
--------
UPDATE [dbo].[MENU]
SET
IsDefault = 0
MenuName =@MenuName,
MenuType = @MenuType
where MenuID=@MenuID
and PortalID=@PortalID
--------------
EndProcessing:
--------------
SET ANSINULLS ON
您还可以将goto与标签一起使用:
CREATE PROCEDURE [dbo].[usp_UpdateMenu]
@MenuName VARCHAR(100),
@MenuType VARCHAR(50),
@IsDefault BIT,
@PortalID INT,
@MenuID INT
AS
IF @IsDefault = 1 GOTO Update2
--------
Update1:
--------
UPDATE [dbo].[MENU]
SET
MenuName =@MenuName,
MenuType = @MenuType
where MenuID=@MenuID
GOTO EndProcessing
--------
Update2:
--------
UPDATE [dbo].[MENU]
SET
IsDefault = 0
MenuName =@MenuName,
MenuType = @MenuType
where MenuID=@MenuID
and PortalID=@PortalID
--------------
EndProcessing:
--------------
SET ANSINULLS ON
我最好的读物是:
- 如果某个特定项即将设置为默认项,则为当前默认项重置该属性
- 之后,只需继续更新指定的项目
1
指定为@IsDefault
的值,则该过程将执行两次更新,否则只执行一次更新。我的最佳解读是:
- 如果某个特定项即将设置为默认项,则为当前默认项重置该属性
- 之后,只需继续更新指定的项目
因此,如果将
1
指定为@IsDefault
的值,则该过程将执行两次更新,否则只有一个。我的整个情况与上面所述一致。我修改了我的问题,请建议。我的整个情况与上面所述一致。我修改了我的问题,请建议。这应该是对Matten答案的评论。这应该是对Matten答案的评论