【问题标题】:SQL Server stored procedures and countsSQL Server 存储过程和计数
【发布时间】:2016-09-30 21:06:22
【问题描述】:

您好,我对 SQL 比较陌生。我正在尝试创建一个存储过程来计算具有某些标准的记录。如果计数 1,那么我希望它打印一个值,以便我可以将它传递回VB6 中的应用程序。

我正在尝试做的是查找员工是否已经可以访问某个应用程序,如果他们这样做了,那么就做一些事情......

select sum(clientid) as NumClients 
from TblEmployee 
where clientid = '1709' 
      and ApplicationID='Excel'

然后我想检查计数,但我有点迷失在合成器上,类似于

if NumClients <> 1
    begin
        Print '1'
        go
    end

【问题讨论】:

  • SUMming ClientId 字段对我来说似乎很奇怪。 COUNT他们不是更好吗?
  • VB 看不到 PRINT 返回的任何内容。取而代之的是您的 sp can return 输出参数、代码或表格。

标签: sql sql-server stored-procedures


【解决方案1】:

试试这个。

ALTER PROCEDURE TestSP
(
    @clientid  INT,
    @ApplicationID  INT,
    @result BIT OUTPUT
)
AS
BEGIN

   DECLARE @count INT;

   SELECT @count= CASE   WHEN COUNT(clientid )>=1 THEN 1
                         ELSE 0
                         END
   FROM TblEmployee 
   WHERE clientid = @clientid
        AND ApplicationID = @ApplicationID

   SET @result = @count

END
GO

【讨论】:

    【解决方案2】:

    做这样的事情:

    CREATE PROCEDURE [dbo].[usp_EmpCheck]
        (
        @ClientID INT,
        @App VARCHAR(50),
        @CheckResult BIT OUTPUT
        )
    AS
    BEGIN
    
        IF (
            SELECT
                SUM(clientid) 
            FROM
                TblEmployee 
            WHERE
                clientid = @ClientID 
                AND ApplicationID = @CheckResult
            ) <> 1
            BEGIN
                SET @CheckResult = 1
            END
        ELSE
            BEGIN
                SET @CheckResult = 0
            END
    END
    

    然后让您的 VB 对过程 OUTPUT 参数的值进行操作。

    【讨论】:

    • 我是否能够按照 ELSEIF 而不是 ELSE 的方式做一些事情,比如说我正在检查“Excel”然后我想做 ELSE IF ='WORD' 就像你正在做的那样它,设置@chkResult = 2
    • 是的,IF(条件1)ELSE IF(下一个条件)ELSE(某事)有效。看看这个问题:stackoverflow.com/questions/15085990/…
    【解决方案3】:
    IF EXISTS ( SELECT  *
                FROM    sys.objects
                WHERE   type = 'P'
                        AND name = 'sp_Count' )
        DROP PROCEDURE [dbo].[sp_Count];
    GO 
    
    CREATE PROCEDURE [dbo].[sp_Count]
    AS
        DECLARE @Sum INT;
        SELECT  @Sum = SUM(CompanyID) FROM   dbo.Company;
    
        PRINT @Sum;
    
        IF ( @Sum > 1 )
            BEGIN
    
                PRINT 'More than one';
            END;
        ELSE
            BEGIN
                PRINT 'zero';
            END;
            ---- sp_Count
    

    【讨论】:

      【解决方案4】:

      SQL 代码:

       CREATE PROCEDURE [dbo].[check_number]
           (
           @ClientID INT,
           @App VARCHAR(50)
           )
       AS
      
       select case number
                  WHEN 1 then 'not what you want'
                  ELSE 'what you want'
              END as result
       FROM 
       (SELECT count(1) as number
        FROM   TblEmployee 
        WHERE  clientid = @ClientID 
          AND ApplicationID = @CheckResult ) as results
      

      您的 vb6 代码可能如下所示:

       Set cmd = New ADODB.Command
        cmd.ActiveConnection = con
        cmd.CommandType = adCmdStoredProc
        cmd.CommandText = "check_number
      
        cmd.Parameters.Append cmd.CreateParameter_
          ("ClientID", adint, adParamInput, yourClientIdParamValue)
        cmd.Parameters.Append cmd.CreateParameter_
          ("App", adVarChar, adParamInput, 50, yourAppValue)
      
        Set rs = cmd.Execute
      
        If Not rs.EOF Then
         if rs.Fields(0) = 'what you want' then
          'do what you want !
         End if
        End If
      
        Set cmd.ActiveConnection = Nothing
      
       End Sub
      

      我不确定我的语法对于 vb6 是否 100% 正确

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-08
        • 2011-09-22
        • 1970-01-01
        相关资源
        最近更新 更多