Sql server SQL Server:在CASE语句中设置变量

Sql server SQL Server:在CASE语句中设置变量,sql-server,tsql,Sql Server,Tsql,是否可以在case语句中设置变量?我的代码不起作用。谢谢大家 CREATE PROCEDURE spReport @q1 INT, @q2 INT AS BEGIN -- Dates for the 2 different quarters to be viewed DECLARE @StartDateQ1 DATETIME DECLARE @EndDateQ1 DATETIME DECLARE @StartDateQ2 DATETIME DECLARE @EndDateQ2 DATETIME

是否可以在case语句中设置变量?我的代码不起作用。谢谢大家

CREATE PROCEDURE spReport
@q1 INT,
@q2 INT
AS
BEGIN

-- Dates for the 2 different quarters to be viewed
DECLARE @StartDateQ1 DATETIME
DECLARE @EndDateQ1 DATETIME
DECLARE @StartDateQ2 DATETIME
DECLARE @EndDateQ2 DATETIME

SELECT
CASE @q1
    WHEN 1 THEN SET @StartDateQ1 = '20130401'
END
你可以用

SET @StartDateQ1 = CASE @q1
                     WHEN 1 THEN '20130401'
                   END 
根据
大小写
表达式设置单个变量的值

如果您的实际逻辑更复杂(例如,需要在条件中设置多个变量),请查看
If。。。否则


CASE
是一个表达式,而不是一个控制流构造。

下面是使用IF语句解决此问题的另一种方法:

IF @q1 = 1
BEGIN
    SET @StartDateQ1 = '20130401'
END

在T-SQL中,
CASE
是一个返回值的表达式-在
CASE
语句中不能有代码块。看看Martin的答案如何处理。