具有动态参数的SQL查询

时间:2020-09-28 07:56:04

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

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

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

但是帐户类型可以是一种。

编辑: Okey,如果我尝试从程序中设置此属性(它是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();
        }

2 个答案:

答案 0 :(得分:0)

您可以将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, ',')) 

答案 1 :(得分:0)

根据您的评论,创建一个临时表@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:实现自定义函数以拆分动态传递的参数 带有逗号分隔的值。