从C#在我的数据库中创建表用户定义函数

时间:2017-06-01 20:48:46

标签: c# .net sql-server function udf

我必须创建一个用户定义的函数,它返回一个表作为结果。

我需要从我的c#应用程序创建这个函数,但是当我尝试针对我的DB SQL服务器运行代码时给出了一个错误,但是,当我从Management Studio运行相同的代码时,它没有给我任何错误并且工作正常细

这就是我在C#中所拥有的

private const string FN_AXDBINFO =@"                            
            CREATE FUNCTION FN_AXDBINFO ( )
            RETURNS @SYS_DBINFO TABLE
                (
                  SYSTEMTYPE VARCHAR(50) ,
                  COUNTRYCODE VARCHAR(10) ,
                  HLNUMBER VARCHAR(15) ,
                  VERSION VARCHAR(20) ,
                  DATO_SISTEMA VARCHAR(20)
                )
            AS
                BEGIN
                    INSERT  INTO @SYS_DBINFO
                            ( SYSTEMTYPE ,
                              COUNTRYCODE ,
                              HLNUMBER ,
                              VERSION ,
                              DATO_SISTEMA
                            )
                            SELECT TOP 1
                                    SYSTEMTYPE ,
                                    COUNTRYCODE ,
                                    HLNUMBER ,
                                    VERSION ,
                                    DATO_SISTEMA
                            FROM    AXDBINFO
                            ORDER BY LAST_UPDATE DESC
                    RETURN
                END
            ";

cmd = GetNewCommand(cc); //This function gets a new SQL COMMNAD 
                            //object with an open sql server connection


//Add the command text from de const    
cmd.CommandText =FN_AXDBINFO;
//Execute
cmd.ExecuteNonQuery(); 



/// <summary>
/// Obtiene un nuevo SqlCommand
/// </summary>
/// <returns></returns>
protected SqlCommand GetNewCommand(CustomConnection cc)
{
    SqlCommand cmd;
    SqlConnection conn = new SqlConnection(Utils.Utils.GetConnectionString(cc));

    cmd = conn.CreateCommand();
    if (conn.State != ConnectionState.Open)
        conn.Open();
    cmd.CommandType = CommandType.Text;

    return cmd;
}

这是运行应用程序时得到的错误:

  

关键字&#39; FUNCTION&#39;附近的语法不正确。       必须声明表变量&#34; @ SYS_DBINFO&#34;。

问题是来自Management studio的相同TSQL代码工作得很好。我尝试了下面的内容:

  • 添加一个名为@SYS_DBINFO的参数,错误更改为
  

关键字&#39; FUNCTION&#39;

附近的语法不正确
  • 将@SYS_DBINFO放在括号之间,得到相同的错误。

  • 尝试使用SMO创建UDF,但它与以前版本的SQL SERVER不兼容

有人可以帮我这个吗?

感谢。

为避免混淆,我编辑了代码,错误保持不变。我无法创建表类型的UDF,因为SQL SERVER假定由名称为@SYS_DBINFO的函数生成的表是标量变量,而且管理工作室的相同代码也能正常工作。

2 个答案:

答案 0 :(得分:1)

您需要单独执行drop并创建脚本。 GO不是T-SQL语句,而是SSMS等工具使用的批处理分隔符。此外,您无法参数化CREATE FUNCTION DDL,也不需要。

答案 1 :(得分:0)

问题是我使用相同的SQL COMMAND对象来处理我的所有查询批次,第一批需要参数,第二批和第三批没有,但参数仍在那里......所以...清除参数之后第一批解决问题。