Sql server SQL Server中的开始…结束块
在Sql server SQL Server中的开始…结束块,sql-server,tsql,case,iif,Sql Server,Tsql,Case,Iif,在BEGIN…END块下是否定义了对T-SQL语句进行分组的规则 因为当我在CASE语句或IIF语句中尝试BEGIN…END块时,它失败了 我需要BEGIN…END块,因为我想在案例结果下执行多个操作 SELECT CASE @ChargePaid WHEN 1 THEN BEGIN SELECT 'Paid' END WHEN 0 THEN BEGIN SELE
BEGIN…END
块下是否定义了对T-SQL语句进行分组的规则
因为当我在CASE
语句或IIF
语句中尝试BEGIN…END
块时,它失败了
我需要BEGIN…END
块,因为我想在案例
结果下执行多个操作
SELECT
CASE @ChargePaid
WHEN 1 THEN
BEGIN
SELECT 'Paid'
END
WHEN 0 THEN
BEGIN
SELECT 'Not Paid'
END
END
或
编辑:
IF @cond = 'First'
WITH CTE AS (
SELECT 'A missing' Result
UNION
SELECT 'B missing' Result
UNION
SELECT 'C missing' Result
)
SET @msg = SELECT Result from CTE
IF @cond = 'Second'
WITH CTE AS (
SELECT 'A missing' Result
UNION
SELECT 'B missing' Result
UNION
SELECT 'C missing' Result
)
SET @msg = SELECT Result from CTE
IF @ChargePaid = 0
...
Some code goes here to generate the message.
Then I store the actual message into @msg variable.
...
In the end I store the @msg values (I trim the @msg if it requires) to the table.
我想要的是:
我想验证@ChargePaid条件。
如果为false,我希望避免进一步处理代码优化,并将费用缺失信息存储到@msg variable\table。分隔程序语句
包含一系列Transact-SQL语句,以便可以执行一组Transact-SQL语句
块接受表达式
计算条件列表并返回多个可能的结果表达式之一
因此,您正试图在圆孔中安装方形销钉。分隔程序语句
包含一系列Transact-SQL语句,以便可以执行一组Transact-SQL语句
块接受表达式
计算条件列表并返回多个可能的结果表达式之一
因此,您正在尝试在圆孔中安装方形销钉。是的,有规则,不,您不能这样做。解释真正的潜在需求,而不是您提出的解决方案,然后我们可以提出替代方案。c、 f.-例如,为什么不
选择CASE@ChargePaid当1时,然后选择“Paid”,当0时选择“Paid”,然后选择“not Paid”结束
?Aditya,您实际上想实现什么。Select case和IIF不适用于程序代码。它们仅用于评估。也许你想做点别的事?“你能不能把你要解决的问题放在这里,我们可以帮助你找到正确的方法呢?”MartinSmith,这只是一个伪代码。基本上,它是基于付费条件,我将验证其他数量的东西,并将结果存储到变量中,以在应用程序屏幕上显示result=msg。在这段代码中,我正在使用CTE,所以需要在它之后立即编写SELECT。。。这就是为什么在这种情况下需要开始…结束块。我希望你能理解?嗨,阿迪蒂亚,我看到你想在更新的问题中优化代码等。最好先让某些东西工作起来,然后再进行优化。也许你可以得到一个工作版本,然后问一些关于优化的具体问题。您的伪代码现在与原始问题大不相同,仍然难以理解。顺便说一句,TSQL中的“IF”语句是过程性的,而IIF不是过程性的,所以也许您可以使用IF语句来控制执行。@cameront,无论如何,使用变量解决了我的问题。非常感谢您的快速帮助:)是的,有规则,不,您不能这样做。解释真正的潜在需求,而不是您提出的解决方案,然后我们可以提出替代方案。c、 f.-例如,为什么不选择CASE@ChargePaid当1时,然后选择“Paid”,当0时选择“Paid”,然后选择“not Paid”结束
?Aditya,您实际上想实现什么。Select case和IIF不适用于程序代码。它们仅用于评估。也许你想做点别的事?“你能不能把你要解决的问题放在这里,我们可以帮助你找到正确的方法呢?”MartinSmith,这只是一个伪代码。基本上,它是基于付费条件,我将验证其他数量的东西,并将结果存储到变量中,以在应用程序屏幕上显示result=msg。在这段代码中,我正在使用CTE,所以需要在它之后立即编写SELECT。。。这就是为什么在这种情况下需要开始…结束块。我希望你能理解?嗨,阿迪蒂亚,我看到你想在更新的问题中优化代码等。最好先让某些东西工作起来,然后再进行优化。也许你可以得到一个工作版本,然后问一些关于优化的具体问题。您的伪代码现在与原始问题大不相同,仍然难以理解。顺便说一句,TSQL中的“IF”语句是过程性的,而IIF不是过程性的,所以也许您可以使用IF语句来控制执行。@cameront,无论如何,使用变量解决了我的问题。非常感谢您的快速帮助:)请参阅相关编辑。你能帮忙吗?+1请参见相关编辑。你能帮忙吗?+1.
IF @cond = 'First'
WITH CTE AS (
SELECT 'A missing' Result
UNION
SELECT 'B missing' Result
UNION
SELECT 'C missing' Result
)
SET @msg = SELECT Result from CTE
IF @cond = 'Second'
WITH CTE AS (
SELECT 'A missing' Result
UNION
SELECT 'B missing' Result
UNION
SELECT 'C missing' Result
)
SET @msg = SELECT Result from CTE
IF @ChargePaid = 0
...
Some code goes here to generate the message.
Then I store the actual message into @msg variable.
...
In the end I store the @msg values (I trim the @msg if it requires) to the table.