[英]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.