如何将StringList作为SqlParameter的一部分传递以从SqlServer获取结果

时间:2015-09-12 18:48:21

标签: sql-server vb.net

我试图通过传递一个键列表作为keycodelist的参数来执行sql查询,但它不起作用。即使数据库中存在该值,我也得到了KeyNotFoundException。

我该如何解决这个问题?我是否需要转义调用getKeyValue的参数?

我这样调用了这个函数。

(->) r

1 个答案:

答案 0 :(得分:0)

一个原因,为什么我不喜欢"哦,我们之前有过这个,它是重复的"事情是,链接的文章可能很老,接受和/或得分最高的答案可能不是今天最好的...这种方法也在这些页面上列出,但得分非常低。在我看来,它是处理这个问题的最快和最优雅的方法(至少像我一样,尽可能避免动态SQL ......)

DECLARE @tbl TABLE(ID INT, SomeValue VARCHAR(10));
INSERT INTO @tbl VALUES
 (1,'value 1')
,(2,'value 2')
,(3,'value 3')
,(4,'value 4')
,(5,'value 5');

DECLARE @ListOfIDs VARCHAR(20)='1,3,5';

WITH ListOfIDs AS
(
    SELECT CAST('<root><r>'+REPLACE(@ListOfIDs,',','</r><r>')+'</r></root>' AS XML) AS IDsAsXML
)
,ListOfIDsResolved AS
(
    SELECT x.y.value('.','int') AS ID
    FROM ListOfIDs
    CROSS APPLY ListOfIDs.IDsAsXML.nodes('/root/r') x(y)
)
SELECT * FROM @tbl AS tbl
INNER JOIN ListOfIDsResolved ON tbl.ID=ListOfIDsResolved.ID