簡體   English   中英

在“AS”之前或之后聲明變量有什么區別?

[英]What's the difference between declaring the variable before or after 'AS'?

我發現我朋友的查詢是這樣的。

SET QUOTED_IDENTIFIER ON

GO
ALTER  PROCEDURE [dbo].[GetEmployeeTakeHomePay]
    @erCode VARCHAR(50) ,
    @payCycCode VARCHAR(50) ,
    @pyYear SMALLINT ,
    @pyMonth TINYINT ,
    @pyPrd SMALLINT ,
    @seq INT
AS 
    DECLARE @prdStartDate DATETIME
    BEGIN

    SELECT TOP 0
            *
    INTO    #molohok
    FROM    dbo.PYTRX_TakeHomePayWorkfile
    WHERE   ErCode = @erCode
            AND PayCycCode = @payCycCode
            AND PYYear = @pyYear
            AND PYMonth = @pyMonth
            AND PYPrd = @pyPrd
            AND Seq = @seq

'AS' 前后也有變量。 在“AS”之前和之后聲明變量有什么區別?

參數在AS之前,變量在AS之后的聲明體中

ALTER  PROCEDURE [dbo].[GetEmployeeTakeHomePay]
    <procedure parameters>
AS 
    <local variables>

看官方文檔

as之前的“變量”是存儲過程的參數。

參數是調用存儲過程時提供的“變量”。 所以這個存儲過程需要六個參數。 參數可以是可選的。

as后面的“變量”被聲明為在存儲過程運行時使用的局部變量。 實際上, declare可以用在任何編程塊中。

請注意,一個存儲過程可以接受多個語句。 但是,我總是把存儲過程的主體放在它自己的begin / end塊中。 我還在程序的參數周圍加上了括號。

所以,我會這樣寫:

ALTER PROCEDURE [dbo].GetEmployeeTakeHomePay (
    @erCode VARCHAR(50) ,
    @payCycCode VARCHAR(50) ,
    @pyYear SMALLINT ,
    @pyMonth TINYINT ,
    @pyPrd SMALLINT ,
    @seq INT
) AS 
BEGIN
    DECLARE @prdStartDate DATETIME;

    . . . 
END;  -- GetEmployeeTakeHomePay

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM