2012-10-14 34 views
0
SET ROWCOUNT @startRowIndex 
    SELECT @first_id = id FROM Question q ORDER BY q.id 

這是直線前進足以讓從表中的第一個ID,但是如果SQL語句是字符串,我怎樣才能像上面SQL服務器,獲取產值sp_executesql的

相同的結果我的意思是如何從EXEC sp_executesql @sql獲得輸出q.id

IF @sortCommand like 'sortAsAnswerCount' OR 
    @sortCommand like 'sortAsNonAnswer' 
BEGIN 

    set @sql=N'WITH LikeCounts 
     AS 
     (
     SELECT  TOP (100) PERCENT q.Id, q.Title, c.CustomerId, c.CreatedOnUtc, 
            (SELECT  COUNT(*) 
            FROM   dbo.CustomerLikeQuestion 
            WHERE  (QuestionId = q.Id)) AS LikeCount 
     FROM   dbo.CustomerContent AS c INNER JOIN 
           dbo.Question AS q ON c.Id = q.Id 
     ORDER BY likecount DESC 
     ) 
     SELECT *, row_number() over (order by likecount desc) as RowNum 
     fROM LikeCounts' 

END 
+0

在這裏看到:http://support.microsoft.com/kb/262499 –

+0

相關,或者可以是重複的:[**從存儲過程**](HTTP://計算器。 COM /問題/ 1492411/SQL服務器 - 選擇 - 從存儲過程)。 –

回答

0
declare @params nvarchar(max), @sql nvarchar(max), @first_id int 

select @params = "@first_id int output" 

IF @sortCommand like 'sortAsAnswerCount' OR 
    @sortCommand like 'sortAsNonAnswer' 
BEGIN 

    set @sql=N'WITH LikeCounts 
    AS 
    (
    SELECT  TOP (100) PERCENT q.Id, q.Title, c.CustomerId, c.CreatedOnUtc, 
           (SELECT  COUNT(*) 
           FROM   dbo.CustomerLikeQuestion 
           WHERE  (QuestionId = q.Id)) AS LikeCount 
    FROM   dbo.CustomerContent AS c INNER JOIN 
          dbo.Question AS q ON c.Id = q.Id 
    ORDER BY likecount DESC 
    ) 
    SELECT @first_id = id 
    fROM LikeCounts' 

END 

exec dbo.sp_executesql 
    @stmt = @sql, 
    @params = @params, 
    @first_id = @first_id output