DELETE FROM tblArtworkApprovalUsers
WHERE (userID NOT IN (@UserIDList)) AND (approvalID =
(SELECT ID
FROM tblArtworkApprovals
WHERE (templateID = @TemplateID)))
这是在我的表适配器中。 @UserIDList需要接受类似的内容:
2,44,12,70
如何让此查询接受该字符串?
答案 0 :(得分:2)
NOT IN <expr>
需要表达式而不是字符串。因此,如果您传递参数而不是动态构造SQL,则无法完成。
替代方法是动态创建SQL(,同时了解SQL注入):
string commad = @"DELETE FROM tblArtworkApprovalUsers " +
"WHERE (userID NOT IN ({0})) AND (approvalID ="+
"(SELECT ID " +
"FROM tblArtworkApprovals " +
"WHERE (templateID = {1})))";
command = string.Format(command, userIDList, templateID);
Craig指出了一个更好的解决方案,其中没有提供更好的性能(因为参数是可变的,并且查询计划不会被缓存,除非它完全相同)但是有助于SQL注入攻击: Parameterize an SQL IN clause
答案 1 :(得分:1)
你有几个选择......
答案 2 :(得分:1)
您可能需要查看Arrays in SQL2005和Arrays in SQL2008,具体取决于SQL Server的版本。