我想定义一个函数来获取“订单号”参数并返回客户的“姓氏”。这两个参数在不同的表中我正在使用内部联接。
我得到的错误是:(
附近的语法不正确。
关键字RETURN
附近的语法不正确。
必须声明标量变量@FindingLastName
。
我的代码:
com.CommandText = "Create function Sales.FindingLastName (@OrderNumber varchar(10)) Returns nvarchar(50) As Begin Declare @FindingLastName(Select LastName from Sales.OrderDetails INNER JOIN Sales.Customers RETURN @FindingLastName END GO)";
com.Connection = con;
MessageBox.Show(com.ExecuteNonQuery().ToString());
答案 0 :(得分:3)
你的SQL语法中有很多东西遗漏了。请看下面的SQL语法将ColumnName
更改为join语句中的实际列名。您可能希望通过添加WHERE
子句来相应地修改选择条件。
Create function Sales.FindingLastName
(@OrderNumber varchar(10))
Returns nvarchar(50) As
Begin
Declare @FindingLastName varchar(50) =
(Select LastName from Sales.OrderDetails O INNER JOIN Sales.Customers C ON C.ColumnName =O.ColumnName)
RETURN @FindingLastName
END
还有一个问题你只能运行一次。创建函数后,您无法再次创建相同的函数。所以我怀疑你确定你想通过c#这样做吗? !
有关SQL中用户定义函数的更多详细信息,请参阅THIS LINK
答案 1 :(得分:1)
有什么突出的是GO
。首先,GO
不是SQL 。它只存在于SSMS(等)之类的工具中,它使用它将长脚本分成单独的命令。在实际命令中,它只是一个语法错误。因此,GO
永远不会出现在嵌套内,例如括号或BEGIN
/ END
块。
基本上,请删除GO
。
但是,在ADO.NET中使用DDL是非常罕见的,除非是自动架构迁移工具的一部分等。
答案 2 :(得分:0)
我不是SQL的英雄,但我认为这应该有效
Create function Sales.FindingLastName (@OrderNumber varchar(10))
RETURNS nvarchar(50)
As
RETURN
(
Select LastName
from Sales.OrderDetails INNER JOIN Sales.Customers
);