Stored procedures 为存储过程编写脚本的请求在进程查询中返回值

Stored procedures 为存储过程编写脚本的请求在进程查询中返回值,stored-procedures,Stored Procedures,编写计分过程脚本的请求,返回以下内容: 请求 当传递null时,返回所有 和字段可以搜索 组合可以搜索 代码: @AccountNo varchar(30) = null, @DateLogged datetime = null, @ReferenceNo varchar (50) = null, @ErfNo varchar (45) = null, @Surname varchar (255) = null, @Name varchar (255) = null, @IdentityNo v

编写计分过程脚本的请求,返回以下内容:

请求

  • 当传递null时,返回所有
  • 和字段可以搜索
  • 组合可以搜索
  • 代码:

    @AccountNo varchar(30) = null,
    @DateLogged datetime = null,
    @ReferenceNo varchar (50) = null,
    @ErfNo varchar (45) = null,
    @Surname varchar (255) = null,
    @Name varchar (255) = null,
    @IdentityNo varchar (13) = null,
    
    ALTER PROCEDURE [dbo].[Search_case]
    (
         @AccountNo varchar(30) = null,
         @DateLogged datetime = null,
         @ReferenceNo varchar (50) = null,
         @ErfNo varchar (45) = null,
         @Surname varchar (255) = null,
         @Name varchar (255) = null,
         @ProcessInstanceId varchar (50) = null,
         @IdentityNo varchar (13) = null,
         @Summary varchar (max) = null,
         @Suspend varchar (10) = null,
         @Notes varchar (max) = null,
         @RatesNo varchar (30) = null,
         @Status varchar (50) = null
    )
    WITH EXECUTE AS OWNER, RECOMPILE
    AS
        SET NOCOUNT ON;
    
        SELECT
            dbo.Cases.DateLogged,
            dbo.Cases.ReferenceNo,
            dbo.Account.AccountNo,
            dbo.Customer.RatesNo,
            dbo.Customer.IdentityNo,
            dbo.Account.ErfNo,
            dbo.Customer.Surname,
            dbo.Customer.Name,
            dbo.Cases.ProcessInstanceId,
            dbo.Cases.Status,
            dbo.Cases.Summary,
            dbo.Cases.Suspend,
            dbo.Cases.Notes
        FROM
            [ICSM_CORRES].[dbo].[Cases]
        INNER JOIN 
            [dbo].Customer ON dbo.Cases.CustomerId = dbo.Cases.CustomerId
        INNER JOIN
            dbo.Account ON dbo.Customer.AccountNoId = dbo.Account.AccountNoId
        WHERE
            dbo.Account.AccountNo = @AccountNo
            OR dbo.Customer.RatesNo = @RatesNo
            OR dbo.Cases.DateLogged = @DateLogged
            OR dbo.Cases.ReferenceNo = @ReferenceNo
            OR dbo.Customer.IdentityNo = @IdentityNo
            OR dbo.Account.ErfNo = @ErfNo
            OR dbo.Customer.Surname = @Surname
            OR dbo.Customer.Name = @Name
            OR dbo.Cases.ProcessInstanceId = @ProcessInstanceId
            OR dbo.Cases.Status = @Status
            OR dbo.Cases.Summary = @Summary
            OR dbo.Cases.Suspend = @Suspend
            OR dbo.Cases.Notes = @Notes
    
    • “当传递null时,返回all”=>
      其中col=ISNULL(@argument,col)

    • 其余条件应该可以工作,但初始查询的性能不是最好的(multiple join和multiple OR in where子句)可能会导致全表扫描

    • 您还可以将完全限定的名称(如
      [dbo].Customer)别名为c
      ,然后使用
      dbo.Customer.lasname
      简单地命名为
      c.lasname

    • 可能您在(相同的表和列)
      [dbo]上联接时出错。dbo.Cases.CustomerId=dbo.Cases.CustomerId上的客户

    • “当传递null时,返回all”=>
      其中col=ISNULL(@argument,col)

    • 其余条件应该可以工作,但初始查询的性能不是最好的(multiple join和multiple OR in where子句)可能会导致全表扫描

    • 您还可以将完全限定的名称(如
      [dbo].Customer)别名为c
      ,然后使用
      dbo.Customer.lasname
      简单地命名为
      c.lasname

    • 可能您在(相同的表和列)
      [dbo]上联接时出错。dbo.Cases.CustomerId=dbo.Cases.CustomerId上的客户


    @TakalaniMariba太好了,别忘了标记答案;)@TakalaniMariba太好了,别忘了标记答案;)
    ALTER PROCEDURE [dbo].[Search_case]
    (
         @AccountNo varchar(30) = null,
         @DateLogged datetime = null,
         @ReferenceNo varchar (50) = null,
         @ErfNo varchar (45) = null,
         @Surname varchar (255) = null,
         @Name varchar (255) = null,
         @ProcessInstanceId varchar (50) = null,
         @IdentityNo varchar (13) = null,
         @Summary varchar (max) = null,
         @Suspend varchar (10) = null,
         @Notes varchar (max) = null,
         @RatesNo varchar (30) = null,
         @Status varchar (50) = null
    )
    WITH EXECUTE AS OWNER, RECOMPILE
    AS
        SET NOCOUNT ON;
    
        SELECT
            dbo.Cases.DateLogged,
            dbo.Cases.ReferenceNo,
            dbo.Account.AccountNo,
            dbo.Customer.RatesNo,
            dbo.Customer.IdentityNo,
            dbo.Account.ErfNo,
            dbo.Customer.Surname,
            dbo.Customer.Name,
            dbo.Cases.ProcessInstanceId,
            dbo.Cases.Status,
            dbo.Cases.Summary,
            dbo.Cases.Suspend,
            dbo.Cases.Notes
        FROM
            [ICSM_CORRES].[dbo].[Cases]
        INNER JOIN 
            [dbo].Customer ON dbo.Cases.CustomerId = dbo.Cases.CustomerId
        INNER JOIN
            dbo.Account ON dbo.Customer.AccountNoId = dbo.Account.AccountNoId
        WHERE
            dbo.Account.AccountNo = ISNULL(@AccountNo, dbo.Account.AccountNo)
            OR dbo.Customer.RatesNo = ISNULL(@RatesNo, dbo.Customer.RatesNo)
            OR dbo.Cases.DateLogged = ISNULL(@DateLogged, dbo.Cases.DateLogged)
            OR dbo.Cases.ReferenceNo = ISNULL(@ReferenceNo, dbo.Cases.ReferenceNo)
            OR dbo.Customer.IdentityNo = ISNULL(@IdentityNo, dbo.Customer.IdentityNo)
            /* ... and so on */