创建函数 SQL-Server 语法不正确

Posted

技术标签:

【中文标题】创建函数 SQL-Server 语法不正确【英文标题】:Create Function SQL-Server Incorrect syntax 【发布时间】:2019-04-05 11:22:05 【问题描述】:

我是 SQL Sg 服务器的新手,我正在尝试使用 create 函数运行代码以将价格从美元转换为十进制。我得到以下标志

"不正确的语法:'Create Function' 必须是 批处理。

谁能指出我做错了什么?谢谢!

CREATE FUNCTION week3.ConvertToEuro ( @priceUSD decimal(5,2))
returns decimal (5,2)

begin
        declare @PriceEuro decimal (5,2)
        set @PriceEuro =(@priceUSD * .89)
        return @PriceEuro

        end 

SELECT TOP (1000) [ProductName]
      ,[price]
      ,week3.ConvertToEuro(price) as PriceEuro
  FROM [AA5100_edmistonml].[Week3].[productprice]

【问题讨论】:

除非您使用 SQL Server 2019(并使用内联标量功能),否则我建议您使用内联表值函数。标量函数可能很慢。 汇率可能会发生变化,因此最好将其设为参数(或从最新表中查询)。 @Larnu。 . .旁注SQL Server 2019 尚未发布。 @YogeshSharma 现在在 CTP 2.4 中,并且(预览版)已经公开提供了一段时间。当然,这就是为什么我说“除非你使用 2019”;很有可能它们不是(特别是因为 2.4 现在仅作为评估版本提供,而不是开发/表达)。 【参考方案1】:

这两个语句是不同的,你要么分开运行,要么放在GO

CREATE FUNCTION week3.ConvertToEuro ( @priceUSD decimal(5,2))
returns decimal (5,2)
begin
        declare @PriceEuro decimal (5,2)
        set @PriceEuro =(@priceUSD * .89)
        return @PriceEuro
end 

GO

SELECT TOP (1000) [ProductName], [price], week3.ConvertToEuro(price) as PriceEuro
FROM [AA5100_edmistonml].[Week3].[productprice];

【讨论】:

【参考方案2】:

尝试如下

CREATE FUNCTION week3.ConvertToEuro ( @priceUSD decimal(5,2))
returns decimal (5,2)
as -- add this 
begin
        declare @PriceEuro decimal (5,2)
        set @PriceEuro =(@priceUSD * .89)
        return @PriceEuro

        end 

go -- add this
SELECT TOP (1000) [ProductName]
      ,[price]
      ,week3.ConvertToEuro(price) as PriceEuro
  FROM [AA5100_edmistonml].[Week3].[productprice]

【讨论】:

嘿 Zaynul...恭喜您今天获得了 sql 金质徽章...这是一项了不起的成就,干杯!【参考方案3】:

尝试创建as 语句并在语句之间添加go

CREATE FUNCTION week3.ConvertToEuro ( @priceUSD decimal(5,2))
returns decimal (5,2)
as  
begin
        declare @PriceEuro decimal (5,2)
        set @PriceEuro =(@priceUSD * .89)
        return @PriceEuro

        end 

go  
SELECT TOP (1000) [ProductName]
      ,[price]
      ,week3.ConvertToEuro(price) as PriceEuro
  FROM [AA5100_edmistonml].[Week3].[productprice]

【讨论】:

以上是关于创建函数 SQL-Server 语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

SQL-Server:继续最后一个值而不是 NULL,分区不正确

从 MS SQL-Server 迁移数据库时出现 MYSQL Workbench“不正确的字符串值”错误

Sql-Server用insert插入多行数据-语法和例子

组合查询时的 SQL-server 语法错误(传递查询)

mysql @@identity 与 sql-server last_insert_id()

SQL-server'WEEKDAY'不是公认的内置函数名称[关闭]