如何使用C#创建SQL函数

时间:2014-01-03 11:50:14

标签: c# sql

我想定义一个函数来获取“订单号”参数并返回客户的“姓氏”。这两个参数在不同的表中我正在使用内部联接。

我得到的错误是:(附近的语法不正确。

关键字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());

3 个答案:

答案 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 
    );