[英]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?
有多個錯誤。
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.