【问题标题】:SQL query with dynamic parameters带动态参数的 SQL 查询
【发布时间】:2020-09-28 07:56:04
【问题描述】:

我试图从数据库中获取一些数据。我需要从我的表中获取帐户信息 - 这种类型的信息将取决于用户。如果他/她将插入 account type = 1 -> 他将获得此信息。如果它取决于用户,我如何创建查询:例如,用户可以选择一种或多种帐户类型以及如何显示我的查询? 现在我有类似的东西:

SELECT accountID, accountName,AccountNo,accountType from account_ref
where accountType not in (4, 9) and accountType IN (1, 2, 3)

但帐户类型可以是 1,也可以不是。

编辑: 好吧,如果我尝试从我的程序中设置这个属性(它是 c#) 在这种情况下,我创建了方法:输入参数 - 它是带有 AccountType 的列表(哪个用户打开了) 如何动态设置它

        public async Task<IList<AccountInfo>> GetAccountByAccountType(IList<AccountType> item)
        {
            //item

            string query = $"SELECT accountID, accountName, AccountNo, accountType from account_ref " +
                            "where accountType not in (4, 9) and accountType IN(1, 2, 3)";

            var accType = await Connection.QueryAsync<AccountInfo>(query);

            return accType.ToList();
        }

【问题讨论】:

  • 你使用 MySQL 还是 SQLServer ?
  • accountType = 1 or 2 or 3 - 这是错误的,必须是accountType IN (1, 2, 3)。这使得accountType not in (4, 9) 多余。
  • 我使用 SQLServer。
  • 好吧,这个实现是正确的,但是这里设置了3个参数accountType IN (1, 2, 3)。我想动态设置它。有可能吗?

标签: c# sql .net sql-server ado


【解决方案1】:

您可以将 IN 与逗号分隔的值一起使用

DECLARE @ids NVARCHAR(100) ='1,2,3'    
SELECT accountID, accountName,AccountNo,accountType 
FROM account_ref
WHERE accountType NOT IN (4, 9) 
AND accountType IN (SELECT value from STRING_SPLIT (@ids, ',')) 

【讨论】:

  • 是的,我修好了。但是这里设置我的 accountType **accountType IN (1,2,3) **。我可以动态设置吗?因为我不知道用户需要哪些参数
  • 为了使其动态化,您必须将给定的 Id 作为参数传递给存储过程或查询
【解决方案2】:

根据您的 cmets,创建一个临时表 @AccountType 或 temp 变量,然后将动态传递的值存储在其中,然后像这样使用它。

INSERT INTO @AccountType
SELECT Value FROM dbo.FncSplitArrayIntoTable(@accountTypeParameter, ',')

SELECT accountID, accountName, AccountNo, accountType 
FROM account_ref
WHERE accountType IN (SELECT accountType FROM @AccountType)

FncSplitArrayIntoTable : 实现自定义函数来拆分动态传递的参数 使用逗号分隔的值。

【讨论】:

  • Okey.But 如果我尝试使用程序设置它?
  • 由于您已经编辑了您的问题,那么对于您目前的要求,这不是一个好方法。您要么使用 LINQ,要么创建一个存储过程并通过从 C# 传递参数来执行它。
猜你喜欢
  • 2017-09-10
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多