Har väldigt förenklat en sp som ser ut som nedan. Problemet är att jag inte kan spara denna sp i vs.net pga raden med fet stil. Så hur skall jag retunera antal rader som Templist har?
ALTER PROCEDURE up_Selectxxx
(
@cat int,
@pageindex int,
@numrows int,
@rowcount int OUTPUT
)
AS
BEGIN
DECLARE @startrowindex int
SET @startrowindex = (@pageindex * @numrows) + 1;
WITH Templist AS (
SELECT ROW_NUMBER() OVER (ORDER BY Id) AS Row, Id, Title FROM Table1 WHERE Visible = 1 AND CatId = @catid
)
[b]SET @rowcount = (SELECT COUNT(Id) FROM Templist)[/b]
SELECT * FROM Templist WHERE Row BETWEEN @startrowindex AND @startrowindex+@numrows-1
END
Du kan bara använda den en gång (Templist).
http://msdn2.microsoft.com/en-us/library/ms146017(en-US,SQL.90).aspx
Mitt förslag:
ALTER PROCEDURE up_Selectxxx
(
@cat int,
@pageindex int,
@numrows int,
@rowcount int OUTPUT
)
AS
BEGIN
DECLARE @startrowindex int
SET @startrowindex = (@pageindex * @numrows) + 1;
WITH Templist AS (
SELECT ROW_NUMBER() OVER (ORDER BY Id) AS Row, Id, Title FROM Table1 WHERE Visible = 1 AND CatId = @catid
)
SELECT * FROM Templist WHERE Row BETWEEN @startrowindex AND @startrowindex+@numrows-1
SET @rowcount = (SELECT @rowcount = COUNT(Id) FROM Table1 WHERE Visible = 1 AND CatId = @catid)
END
Hade hoppats att jag inte skulle behöva göra två select för att selecten i dess fulla skick är ganska maffig, men får väl bli så i vilket fall. Eller helt enkelt använda @nders alternativ. Får se vilket som visar sig vara mer effektivt.
Tack för svaren.
270 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e