Asp.net 如何在SQLServer2008中传递SQL函数中要比较的值列表?

Asp.net 如何在SQLServer2008中传递SQL函数中要比较的值列表?,asp.net,sql-server,stored-procedures,function,Asp.net,Sql Server,Stored Procedures,Function,我有一个SQL函数,其中包含以下SQL: SELECT StockID FROM (SELECT DISTINCT StockID, ROW_NUMBER() OVER(ORDER BY DateAdded DESC) AS RowNum FROM Stock WHERE CategoryCode LIKE @CategoryID) AS Info WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) -

我有一个SQL函数,其中包含以下SQL:

SELECT StockID FROM (SELECT DISTINCT StockID, 
ROW_NUMBER() OVER(ORDER BY DateAdded DESC) AS RowNum
FROM Stock
WHERE CategoryCode LIKE @CategoryID) AS Info
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1
我有一个参数@CategoryID-但是我需要接受一个类别ID,如“BA”,并将其转换为一个类别ID列表,如“IE”、“EG”等,因此我的WHERE子句如下所示:

WHERE (CategoryCode LIKE 'IE' OR CategoryCode LIKE 'EG') AS Info
我有一个查找表,其中包含“BA”代码,然后是所有真正的类别代码,这意味着像“IE”和“EG”。 如何将CategoryID扩展到SQL函数中的多个“或”语句? 我不知道怎么做,有人能解决这个问题吗

目前,如图所示的查询可以处理一个CategoryID,如“IE”,这是因为我需要一个类别页面,如category.aspx,其中传递了参数“BA”,如category.aspx?category=BA,该页面将列出所有类别代码为“EG”和“IE”的项目


我需要它的原因是有一个“父”类别代码,它有多个不同于父代码的“子”类别代码。如果有帮助的话,我在前端使用ASP.NET和.NET 3.5。

假设参数是一个共同分隔的categoryID列表

试一试


性能不会很好,但如果参数是一个由categoryID共同分隔的列表,那么它应该会为您带来好处

试一试

性能不会很好,但它应该会为您带来好处

尝试使用

WHERE CategoryCode IN (
    SELECT LookupCategoryCode 
    FROM LookupTable 
    WHERE LookupCategoryId = @CategoryId
)
替换查找表中相应值的“LookupCategoryCode”、“LookupTable”和“LookupCategoryId”。

尝试使用

WHERE CategoryCode IN (
    SELECT LookupCategoryCode 
    FROM LookupTable 
    WHERE LookupCategoryId = @CategoryId
)


将“LookupCategoryCode”、“LookupTable”和“LookupCategoryId”替换为查找表中的相应值。

这里不使用LINQ to SQL有什么好的理由吗?我只使用了LINQ for XML,所以不确定如何使用SQL,但这个想法很有趣。你的查询怎么会有两个WHERE子句呢?这不是SQL的
WHERE CategoryCode LIKE@CategoryID)AS Info
部分看起来应该是一个连接或在select列表中。我知道SQL看起来有点奇怪,select StockID FROM(..)AS Info,其中RowNum BETWEEN etc是一个,在括号内(..)另一个是-它基于一个自定义分页示例,该示例工作得很好-除了我需要支持多个类别-因此问题就出现了。这里不使用LINQ to SQL有什么好的理由吗?我只使用了LINQ for XML,所以不确定如何使用SQL,但这个想法很有趣。你的查询怎么会有两个WHERE子句呢?这不是SQL的
WHERE CategoryCode LIKE@CategoryID)AS Info
部分看起来应该是一个连接或在select列表中。我知道SQL看起来有点奇怪,select StockID FROM(..)AS Info,其中RowNum BETWEEN etc是一个,在括号内(..)是另一个-它基于一个自定义分页示例,该示例工作得很好-除了我需要支持多个类别之外-因此问题就来了。好的,上面的方法适用于小表,是一个简单的解决方案,但是在WHERE子句中使用类似上面的函数不应该用于大型数据库。看起来您得到了一些额外的答案,祝您的应用程序好运。好的,上述方法适用于小表,是一个简单的解决方案,但是在WHERE子句中使用上述函数不应用于大型数据库。看起来你得到了一些额外的答案,祝你申请好运。我肯定我试过类似的方法,但会再试一次。我尝试的大多数组合都会导致读取时间增加,我会尽量将这些时间保持在最小值。有了索引就可以了。但是,如果性能确实变得至关重要,则可以使用存储过程构建sql查询,然后通过sp_executesql执行它[.但一定要首先进行测试,因为您必须考虑编写和维护存储过程的开销。我发布了一个示例-它确实有效,但我的数据库读取比应该的高10倍-我仍然缺少一些东西,但它确实返回了我需要的行为-只需要修复表,以便获得性能ce我需要。我只是想更新一下,它现在可以工作了-看起来我错过了一个索引,没有一个我应该有的聚集索引。我肯定我尝试过类似的方法,但会再试一次。我尝试的大多数组合都会导致读写时间增加,我正在尝试将其保持在最小值。有了索引,应该可以。但是,如果性能确实变得至关重要,您可以使用存储过程来构建sql查询,然后通过sp_executesql执行它[.但一定要首先进行测试,因为您必须考虑编写和维护存储过程的开销。我发布了一个示例-它确实有效,但我的数据库读取比应该的高10倍-我仍然缺少一些东西,但它确实返回了我需要的行为-只需要修复表,以便获得性能我需要ce。我只是想更新一下,它现在可以工作了——看起来我错过了一个索引,没有一个我应该拥有的聚集索引。