2015-02-05 77 views
0

在下面的MS SQL SERVER 2012 EXPRESS中有一个功能。为什么ms sql server 2012中的函数返回null?

CREATE FUNCTION [dbo].[fnCheckClientAppVersion](@Version AS NVARCHAR(15)) 
RETURNS INT 
AS 
BEGIN 
    DECLARE @VRS AS NVARCHAR(15); 
    SET @VRS = (SELECT [Value] FROM Options WHERE [Key] = 'ClientAppVersion'); 
    IF @Version = @VRS 
     RETURN 1; 
    RETURN 0; 
END 

我试着在下面的C#代码中调用这个函数。

SqlCommand command = new SqlCommand(); 
command.Connection = Globals.Connection; 
command.CommandText = "dbo.fnCheckClientAppVersion"; 
command.CommandType = CommandType.StoredProcedure; 
command.Parameters.Add(new SqlParameter("@Version", "1.0.0.0")); 
object o = command.ExecuteScalar(); 

但每次当我运行这段代码的Ø
为什么?
什么问题?

+0

您可能会发现这很有http://stackoverflow.com/questions/6932199/executescalar-always-returns-null-when-calling-a-scalar-valued功能 – 2015-02-05 15:07:01

回答

5

A function不是stored procedure。您可以更改您的呼叫语法以使用'SELECT dbo.fnCheckClientAppVersion....'并使用CommandType.Text或将您的功能更改为stored procedure,然后从结果中读取值。

+0

是的 - 通常你不会直接调用一个SQL函数,而是与另一个SQL语句结合使用:SELECT Version,dbo.fnCheckClientVersion(Version)AS IsClientAppVersion FROM Table 1 – 2015-02-05 15:23:08

0

建议你应该把它变成一个程序。你也可以大大简化你的查询。下面是如何看起来一个例子:

create procedure CheckClientAppVersion 
(
    @Version nvarchar(15) 
) as 
    set nocount on 

    SELECT case when [Value] = @Version then 1 else 0 end as VersionMatch 
    FROM Options 
    WHERE [Key] = 'ClientAppVersion' 
GO