我正在尝试获取逗号分隔的技能 Ids
但在使用 ado.net 执行查询时得到 null
当我在 SQL Server Management Studio 中运行它时查询工作正常,但是当我尝试使用 ado.net 执行它时,我没有得到任何输出。
我有 2 个表 Employee
和 Skills
,其中包含以下列:
员工
:ID、姓名、位置Skills
: Id, Skills
员工数据:
Id Name Location
7 Abc London
8 Xyz London
9 Xyz USA
10 Abc USA
技能:
Id skills EmployeeId
12 AAA Xyz 7
13 BBB 7
14 CCC 7
15 AAA 8
16 BBB 8
17 CCC 8
18 AAA 9
19 BBB 9
20 CCC 9
21 AAA 10
22 BBB 10
20 CCC 10
到目前为止我的代码:
string Name = "Abc";
string Location = "London";
string csvSkillsIds = string.Join(",", Skill1, Skill2); //AAA Xyz,BBB
'AAA Xyz','BBB' //Added single quotes to comma separated values
string skillList = string.Join(",", csvSkillsIds.Split(',').Select(x => string.Format("'{0}'", x)).ToList());
using (SqlConnection connection = new SqlConnection(""))
{
string query = "Select Stuff(" +
" (" +
" Select ',' + Convert(Varchar, CD.Id)" +
" From Employee as E" +
" Skills S On S.EmployeeId = E.Id " +
" Where E.Name = @name " +
" And E.Location = @location " +
" And S.Skills In (@skills)" +
" For Xml Path ('')" +
" ), 1, 1, ''" +
" ) As SkillId";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
connection.Open();
cmd.Parameters.AddWithValue("@name", Name);
cmd.Parameters.AddWithValue("@location", Location);
cmd.Parameters.AddWithValue("@skills", skillList);
var data = cmd.ExecuteScalar(); //getting no output not even null
connection.Close();
if (data != null)
return data.ToString();
else
return null;
}
}
这是我得到的数据:
但是当我运行下面的查询时,我成功地获得了如下输出:12、13
Select Stuff
(
(
Select ',' + Convert(Varchar, S.Id)
From Employee E
Join Skills S On S.EmployeeId = E.Id
Where E.Name = @name
And E.Location = @location
And S.Skills In ('AAA Xyz', 'BBB')
For Xml Path ('')
), 1, 1, ''
) As Skills
所以我猜问题出在下一行:
And S.Skills In (@skills)
预期输出:12,13
最佳答案
您可以创建一个 SQL Server 函数来拆分以逗号分隔的字符串,如 this answer 中所述.
然后您可以在查询中使用它,例如像这样的东西:
...
" And S.Skills In (SELECT Value FROM F_Split(@skills, ','))" +
...
您的@Skills 参数应包含以逗号分隔的 ID 列表,不带单引号:
cmd.Parameters.AddWithValue("@skills", csvSkillsIds);
关于c# - 使用 ado.net 执行时,逗号分隔的字符串值不适用于 sql 查询的 In 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38047569/