我必须创建一个用户定义的函数,它返回一个表作为结果。
我需要从我的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代码工作得很好。我尝试了下面的内容:
关键字&#39; FUNCTION&#39;
附近的语法不正确
将@SYS_DBINFO放在括号之间,得到相同的错误。
尝试使用SMO创建UDF,但它与以前版本的SQL SERVER不兼容
有人可以帮我这个吗?
感谢。
为避免混淆,我编辑了代码,错误保持不变。我无法创建表类型的UDF,因为SQL SERVER假定由名称为@SYS_DBINFO的函数生成的表是标量变量,而且管理工作室的相同代码也能正常工作。
答案 0 :(得分:1)
您需要单独执行drop并创建脚本。 GO
不是T-SQL语句,而是SSMS等工具使用的批处理分隔符。此外,您无法参数化CREATE FUNCTION
DDL,也不需要。
答案 1 :(得分:0)
问题是我使用相同的SQL COMMAND对象来处理我的所有查询批次,第一批需要参数,第二批和第三批没有,但参数仍在那里......所以...清除参数之后第一批解决问题。