簡體   English   中英

插入之前,Microsoft SQL Server轉換中的存儲過程

[英]Stored procedure in Microsoft SQL Server conversion before inserting

我試圖創建一個存儲過程,該過程對將傳入的參數插入表中之前的參數進行操作。 我表中的一列稱為DATE_CHANGED ,基本上我要在這里執行的操作是將傳遞的日期參數(如2017年12月1日)更改為20171201。這是一個int值。

我寫了這樣一個存儲過程:

CREATE PROCEDURE date_generate
     @startDate DATE
AS
BEGIN
    DECLARE @DATE_KEY INT

    @DATE_KEY = CONVERT(INT, FORMAT(@startDate, 'YYYYMMDD')

    INSERT INTO table date_key = @DATE_KEY
END

但是我得到一個錯誤

'@DATE_KEY附近的語法不正確

是否聲明局部變量僅用於SQL查詢語句,例如

select * 
from table 
where date_key = @DATE_Key?

有多個錯誤。

  • 使用SET將值分配給變量。
  • 也看一下INSERT語句。

CREATE PROCEDURE date_generate
    @startDate date
    AS
    BEGIN
        DECLARE @DATE_KEY int;
        SET @DATE_KEY = CONVERT(int, format(@startDate, 'YYYYMMDD'));
        INSERT INTO DATE_CHANGED (date_key) 
        VALUES (@DATE_KEY);
    END

這看起來真的很奇怪。 您甚至不需要局部變量。 根據您的代碼,您可以編寫:

create procedure date_generate (
    @startDate date
) as
begin
    insert into table (date_key)
        values ( convert(int, format(@startDate, 'YYYYMMDD')) );
end;  -- date_generate

或者,我可能會寫:

create procedure date_generate (
    @startDate date
) as
begin
    insert into table (date_key)
        values ( year(@startDate) * 10000 + month(@startDate) * 100 + day(@startDate) );
end;

為什么在每行上只有一個日期的表對我來說真的沒有意義。 為什么將“日期”存儲為整數也沒有意義。

據我了解,您的存儲過程接受DATE作為參數,但是您需要使用INT進行INSERT。

您可以通過以下方式輕松地將DATE轉換為VARCHAR然后轉換為INT:

DECLARE @DateASInt INT = CAST(CONVERT(VARCHAR(8), @startDate, 112) AS INT);

因此,您的存儲過程將如下所示:

CREATE PROCEDURE date_generate
    @startDate date
    AS
    BEGIN
        INSERT INTO date_key
            VALUES (CAST(CONVERT(VARCHAR(8), @startDate, 112) AS INT));
    END

暫無
暫無

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

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