插入前Microsoft SQL Server转换中的存储过程

时间:2018-03-03 16:36:15

标签: sql sql-server stored-procedures

我正在尝试创建一个存储过程,在插入到我的表中之前对传入的参数进行操作。我的表中的一列被称为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?

1 个答案:

答案 0 :(得分:1)

这看起来很奇怪。你甚至不需要局部变量。根据您的代码,您可以写:

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;

为什么你会在每一行都有一个单独日期的表对我来说没有意义。为什么你将“日期”存储为整数也没有意义。