我有这段代码,我称之为:
EXECUTE get_all_featured @page = 1, @tipoleilao = 2
我的目标是调用此程序并在arg @tipoleilao中设置例如@tipoleilao = 2 and 1
CREATE PROCEDURE get_all_featured
@page int,
@tipoleilao int
AS
SELECT *, (rowNum / 8) + 1 as page
FROM (
SELECT *, Row_Number() OVER (ORDER BY items.data_exp DESC) as rowNum
FROM items INNER JOIN utilizadores ON items.autor = utilizadores.id_user WHERE activo = '1' and tipo_leilao = @tipoleilao and sold = '0'
and featured = '1' and tipo_leilao != 3
) x
WHERE (rowNum / 8) + 1 = @page
我该怎么做?
答案 0 :(得分:0)
这是一个很好的机会,可以在这个问题上引用Erland Sommarskog的essay。有许多解决方案,最好的解决方案取决于许多因素。
如果您要比较的列没有编入索引,并且您想要一个快速简便的解决方案,我会被简单的逗号分隔列表所吸引:
CREATE PROCEDURE get_all_featured
@page int,
@tipoleilao varchar(255)
AS BEGIN
. . .
SELECT . . .
WHERE ','+@tipoleilao+',' like '%,'+cast(tipo_leilao as varchar(255))+'%,' . . ..
我可以听到关于这种方法的呻吟声,但它通常在调用存储过程之前需要最少量的编码。而且,它可以让人类输入值列表。
从这个简单的开始,你有很多选择。您可以采用这样的列表并在其上使用split()
函数。您可以创建用户定义的表类型,并将变量作为表类型传递。您可以在存储过程和调用者之间共享一个公共全局临时表。毫无疑问,Erland讨论了更多奇特的方法