2016-06-01 2 views
0

Привет Я относительно новичок в SQL. Я пытаюсь создать хранимую процедуру для подсчета числа повторов с некоторыми критериями. Если подсчет <> 1, то я хочу, чтобы он напечатал значение, чтобы передать его обратно в мое приложение в VB6.SQL Server хранимых процедур и подсчетов

То, что я пытаюсь сделать, это найти, если работник уже имеет доступ к определенному приложению, если они делают, то сделать что-то .......

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

Тогда я хотел бы проверьте количество, но я потерял на синтаксисе, что-то вроде строк

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

'SUM 'ming поле ClientId кажется странным для меня. Не лучше ли их «СЧИТАТЬ»? –

+0

VB не видит ничего, возвращаемого [ПЕЧАТЬ] (https://msdn.microsoft.com/en-us/library/ms176047.aspx). Вместо этого ваш [sp может возвращать] (https://msdn.microsoft.com/en-us/library/ms188655.aspx) выходной параметр, код или таблицу. –

ответ

1

ли что-то вроде этого:

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.

+0

Я могу так что-то вроде ELSEIF вместо ELSE, скажу, что я проверяю «Excel», тогда я хочу сделать ELSE IF = «WORD» так же, как вы это делаете, установите @chkResult = 2 – LD16

+0

Да, IF (условие1) ELSE IF (следующее условие) ELSE (что-то) действительно. Проверьте этот вопрос: http://stackoverflow.com/questions/15085990/can-you-have-if-then-else-logic-in-sql –

0

попробуйте это.

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 
+0

спасибо, как бы проверить счет и распечатать его значение ????? :) – LD16

0
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 
0

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 

Я не уверен, что мой синтаксис 100% правильно для VB6

Смежные вопросы