如何将值列表作为参数发送到内联SQL?

时间:2014-02-25 08:45:06

标签: c# sql

我们有C#程序,每年,每月等基础上定期生成报告。 这是报告的内联SQL示例。

SELECT DOB, MEMBNO FROM BASIC WHERE DOJ = @ReportRunDate AND STATUS IN @StatusList

使用SqlParameter我们可以将ReportRunDate作为参数发送,但是当来自@StatusList时,我们找不到将其作为参数传递的正确方法。

对于例如@statusList,其值来自输入,看起来像'AB',12','Z1'

我们可以使用下面的字符串连接

string statusList = "'AB',12','Z1";
string sqlCmdText = SELECT DOB, MEMBNO FROM BASIC WHERE DOJ = @ReportRunDate AND STATUS IN (" + statusList + ")";

但我们更喜欢将SQL的所有输入值用作参数。

注意:   - 我提到的查询是一个例子,原始查询是一个页面长度,并有多个IN子句。另外,根据规范,我们仅限于使用内联查询。

请在

上提供指导
  1. 如何参数化StatusList变量?
  2. 有许多报告需要使用内联SQL,我们正在考虑将每个sql与C#代码分开并将它们移动到嵌入式资源。这是最佳做法吗?
  3. 谢谢大家。

1 个答案:

答案 0 :(得分:0)

这里你去......下面的查询应该有效..

select * from YourTableName where ','+@YourVariableName+',' like '%,'+YourColumnName+',%'

以下是测试上述查询的脚本

CREATE TABLE #TT(test varchar(100))
insert into #TT values('abkk'),('cdll'),('ab'),('cd')

select * from #TT

declare @input varchar(100)
set @input = 'abkk,cdll'

select * from  #tt where ','+@input+',' like '%,'+test+',%'

如果对您有帮助,请将此帖标记为答案!