我想在SQL Server中创建调用函数,该函数接收两个参数并返回一个整数。当我调用存储过程时,我使用以下代码:
sqlcmd.CommandType = CommandType.StoredProcedure sqlcmd.CommandText = "PROCEDURE_NAME" sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@param1", Utilities.NothingToDBNull(user))) sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@param2", Utilities.NothingToDBNull(password))) da = New SqlClient.SqlDataAdapter() da.SelectCommand = sqlcmd table = New DataTable() da.Fill(table)
在这种情况下,我有一个由存储过程返回的表。如果我想使用返回标量值的函数而不是存储过程,会有什么变化?
您不能直接调用该函数,只是StoredProcedure,Text( 查询 ),并且TableDirect是允许的。由于您已经接触过存储过程,因此为什么不创建一个具有该功能的过程呢?
StoredProcedure
Text
TableDirect
在您的C#代码中,您可以使用ExecuteScalar命令对象的
ExecuteScalar
sqlcmd.CommandType = CommandType.StoredProcedure sqlcmd.CommandText = "PROCEDURE_NAME" sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@param1", Utilities.NothingToDBNull(user))) sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@param2", Utilities.NothingToDBNull(password))) Dim obj as Object = sqlcmd.ExecuteScalar() ' obj hold now the value from the stored procedure.
您的存储过程现在应该看起来像这样,
CREATE PROCEDURE PROCEDURE_NAME @param1 VARCHAR(15), @param2 VARCHAR(15) AS BEGIN SELECT function_name(@param1, @param2) FROM... WHERE.... END