【问题标题】:Am I correct in thinking that you can not create a local variable?我认为您不能创建局部变量是否正确?
【发布时间】:2018-04-13 13:36:44
【问题描述】:

只是想知道我不断收到下面的错误,但脚本的其余部分有效。

CREATE VIEW View_I_Want AS 

DECLARE @MinDate AS DATE

SET @MinDate = 
    (SELECT MIN(Full_Date) AS First_Date
    FROM tbl.Calendar
    WHERE [Fin_Year] = 
        (SELECT [Fin_Year] - 1
        FROM tbl.Calendar
        WHERE Full_Date = CAST(GETDATE() AS DATE)))


SELECT DISTINCT MIN(CAST(Data_Table_Date_Column AS DATE)) AS Min_Date,
    MAX(CAST(Data_Table_Date_Column AS DATE)) AS Max_Date



FROM data_Table
WHERE CAST(Data_Table_Date_Column AS DATE) >= @MinDate

消息 156,级别 15,状态 1,过程如何,第 3 行语法不正确 靠近关键字“DECLARE”。

【问题讨论】:

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

您不能在视图定义中声明 variables。但另一种方法是:

CREATE VIEW View_I_Want
AS
     SELECT DISTINCT
            MIN(CAST(Data_Table_Date_Column AS DATE)) AS Min_Date,
            MAX(CAST(Data_Table_Date_Column AS DATE)) AS Max_Date
     FROM data_Table
     WHERE CAST(Data_Table_Date_Column AS DATE) >=
     (
         SELECT MIN(Full_Date) AS First_Date
         FROM tbl.Calendar
         WHERE [Fin_Year] =
         (
             SELECT [Fin_Year] - 1
             FROM tbl.Calendar
             WHERE Full_Date = CAST(GETDATE() AS DATE)
         )
     );

【讨论】:

    【解决方案2】:

    您希望该变量作为存储过程的参数吗?在这种情况下,您不使用“Declare”,但如果您希望它作为过程中的变量,请指定数据类型,请使用 Declare @variableName AS 数据类型

    CREATE PROCEDURE dbo.YourStoredProcedure (
    @parameter INT )
    AS
    BEGIN
    DECLARE @variable1 AS INT
    DECLARE @variable2 AS INT
    
    ....
    
    END
    

    【讨论】:

    • 没问题!如果您认为它对您有帮助,请支持我的回答:) @JamesAnon
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多