关键字“ AS”的预期ID附近的语法不正确

时间:2018-11-05 07:12:24

标签: sql sql-server

CREATE OR ALTER FUNCTION dbo.insertdata (@t DATETIME)
AS
BEGIN
    INSERT INTO table2 (*columns*)
        SELECT * 
        FROM table1
        WHERE CAST(date AS DATE) = CAST(@t AS DATE);
END

我遵循了如何创建函数的操作,该函数不会返回任何值,只会更新表。

显示的错误是:

  

关键字“ AS”附近的语法不正确

当我将鼠标悬停在错误处时,状态会出现

  

“ AS”附近的语法不正确。期望的ID。

如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

您正在寻找Stored Procedure,因为在任何一种编程语言中,Function都应始终返回一个值,而由于您的代码没有,您应该使用{{ 1}}。

出现此错误是因为该函数需要返回一个值,我建议您改用存储过程。

Stored procedure

在旁边的注释中,我认为您不需要将CREATE PROCEDURE dbo.insertdata (@t DATETIME)-- Why you are using DATETIME here AS INSERT INTO table2 (*columns*) SELECT * FROM table1 WHERE CAST(date AS DATE) = CAST(@t AS DATE);--and cast it to DATE here GO 变量作为@t数据类型传递,然后将其强制转换为DATETIME,只需将其声明为DATE然后您无需投放。

所以您的存储过程应该是

DATE

答案 1 :(得分:1)

您没有为函数设置返回值。

CREATE OR ALTER FUNCTION dbo.insertdata(@t datetime)
RETURNS @returnTable TABLE 
( Field DECIMAL(38,6) null, Field2 DECIMAL(38,6) null )
AS
BEGIN
....
END