c# - 处理 1 或 2 或 3 值的存储过程

标签 c# stored-procedures parameters query-string overloading

我正在使用存储过程在我的数据库中运行一些查询。该值取自查询字符串,然后传递给存储过程。问题是,用户可以选择超过 1 个选项来生成 3 个或更多查询字符串。

例如http://localhost.com/test.aspx?param=76&param2=79

我知道如何从查询中获取值,但我让存储过程接受 1 个或 2 个或 3 个值有点像重载

例如

   setValue (int val)
    {
       this.value = val;
    }

    setValue (double val)
    {
       this.value = (int) val
    }

    setValue (string val)
    {
       try
       {
          this.value = Integer.parseInt(val)
       }
       catch (Exception e)
       {
         System.out.println(e.getMessage());
         return 0;
       }


    }

这是存储过程的副本..

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getSealRecordID] (@TRANSFER_ID int)
    AS
-- Declare variables


SELECT DISTINCT "FGFSTRANSFERS"."CONSIDERATION", "FGFSTRANSFERS"."AMOUNT_TRANSFER", "FGFSTRANSFERS"."DATE", 
"FGFSTRANSFERS"."TRANSFER_ID", 
CURR = CASE "FGFSTransferDetails"."CURR"
    WHEN 'USD' THEN 'United States Dollars'
    WHEN 'JMD' THEN 'Jamaican Dollars'
    WHEN 'CAD' THEN 'Canadian Dollars'
    WHEN 'GBP' THEN 'POUNDS'
    WHEN 'EUR' THEN 'EUROS'
    END
,"FGFSCUSTOMERS"."CMF_NAME_1", "FGFSCUSTOMERS"."CMF_NAME_2" , "FGFSTransferDetails"."AMOUNT", 
Cons_Curr = CASE "FGFSTransferDetails"."CURR" -- As Cons_Curr, 
    WHEN 'USD' THEN 'United States Dollars'
    WHEN 'JMD' THEN 'Jamaican Dollars'
    WHEN 'CAD' THEN 'Canadian Dollars'
    WHEN 'GBP' THEN 'POUNDS'
    WHEN 'EUR' THEN 'EUROS'
    END

,"FGFSTransferDetails"."DESCRIPTION", "FGFSTransferDetails"."IMID"
 FROM   ("FGFSInvestment"."dbo"."FGFSTransferDetails" "FGFSTransferDetails" INNER JOIN "FGFSInvestment"."dbo"."FGFSTRANSFERS" "FGFSTRANSFERS" ON "FGFSTransferDetails"."TRANSFER_ID"="FGFSTRANSFERS"."TRANSFER_ID") INNER JOIN "FGFSInvestment"."dbo"."FGFSCUSTOMERS" "FGFSCUSTOMERS" ON "FGFSTRANSFERS"."CUSTODIAN"="FGFSCUSTOMERS"."CMF_ACCOUNT"
 WHERE  "FGFSTRANSFERS"."TRANSFER_ID"= @TRANSFER_ID  AND "FGFSTransferDetails"."TRANSFER_ID"=@TRANSFER_ID

最佳答案

您可以在存储过程中使用默认参数:

CREATE PROCEDURE [dbo].[getSealRecordID] 
(   @PARAM int = -1,
    @PARAM2 int = -1,
    @PARAM3 int = -1
)
    AS
...

当然,您必须在 where 子句中处理这些值:

...
WHERE (@PARAM = -1 OR (condition with @PARAM))
  AND (@PARAM1 = -1 OR (condition with @PARAM1))
  AND (@PARAM2 = -1 OR (condition with @PARAM2))

关于c# - 处理 1 或 2 或 3 值的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1040614/

相关文章:

sql - 如何在 SQL 查询中仅检查从存储过程返回的行的第一个值

function - 向两个用户发送确认电子邮件

java - 将数据传递给 Play Framework 中的 @Finally 注释方法

c# - 图像回调 c++ 到 c#

c# - 我破坏了与 Dotfuscator 的兼容性...请帮助我了解如何

php - LIKE % XX(YY)GG % 在 MySQL 中不起作用

c# - 具有不同参数数量的方法的委托(delegate)

c# - 创建并上传追加 Blob 以存储在 Azure 容器中

c# - DirectSound:初始化通知时为 "Value does not fall within the expected range."

sql-server - SQL Server 2008 存储过程中的默认参数值