C# 为什么ms sql server 2012中的函数返回null?
MS SQL SERVER 2012 EXPRESS中有一个函数,如下所示C# 为什么ms sql server 2012中的函数返回null?,c#,sql-server,database,C#,Sql Server,Database,MS SQL SERVER 2012 EXPRESS中有一个函数,如下所示 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');
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
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();
我试着在我的C代码中调用这个函数,如下所示
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
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();
但是每次我运行这段代码时,o的值都是null。
为什么?
问题出在哪里?函数不是存储过程。您可以更改调用语法以使用“SELECT dbo.fnCheckClientAppVersion…”并使用CommandType.Text,或者将函数更改为存储过程,并从结果中读取值。函数不是存储过程。您可以更改调用语法以使用“SELECT dbo.fnCheckClientAppVersion…”并使用CommandType.Text,或者将函数更改为存储过程,并从结果中读取值。如建议,您应该将其转换为过程。您还可以大大简化查询。下面是一个示例,说明了这可能是什么样子:
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
正如建议的那样,你应该把这变成一个过程。您还可以大大简化查询。下面是一个示例,说明了这可能是什么样子:
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
您可能会发现这很有用您可能会发现这很有用耶-通常您不会直接调用SQL函数,但与另一条SQL语句结合使用:SELECT Version,dbo.fnCheckClientVersionVersion AS ISCLIENTAPVERSION FROM Table 1耶-通常您不会直接调用SQL函数,但与另一条SQL语句结合使用:从表1中选择Version,dbo.fnCheckClientVersionVersion作为IsClientAppVersion