2016-10-25 45 views
0

我想在While循環中執行我的選擇查詢,但它不起作用。存儲過程在While循環中選擇語句

Set @i = 1 
    While(@i <= @rowNumber) 

    BEGIN 

     Set @q_getoldeMail = 'SELECT Lower('[email protected]+') FROM (
     SELECT ROW_NUMBER() OVER (ORDER BY ID) AS rownumber 
      ,ID 
      ,[Name] 
      ,[Description] 
      ,[Status] 
      ,[AssignedTo] 
      ,[AssignedToMail] 
      ,[CC] 
     FROM ' + QUOTENAME(@tablename) + ') AS ar Where rownumber = '[email protected]+'' 

    exec sp_executesql @q_getoldeMail, N'@get_oldeMail nvarchar(100) output', @get_oldeMail output 

     Set @i = @i+1 

在其他方面,我想沒有while循環是這樣執行的查詢:

Set @q_getoldeMail = 'SELECT Lower('[email protected]+') FROM (
      SELECT ROW_NUMBER() OVER (ORDER BY ID) AS rownumber 
       ,ID 
       ,[Name] 
       ,[Description] 
       ,[Status] 
       ,[AssignedTo] 
       ,[AssignedToMail] 
       ,[CC] 
      FROM ' + QUOTENAME(@tablename) + ') AS ar Where rownumber = '[email protected]+'' 

     exec sp_executesql @q_getoldeMail, N'@get_oldeMail nvarchar(100) output', @get_oldeMail output 

它不工作,要麼。我的錯誤是什麼?有沒有一種方法從While循環獲得Select語句的值?你可以幫我嗎?

編輯:

我在此代碼部分設置@RowCount值:

SET @q_getrowNumber = 'SELECT Count(ID) 
FROM dbo.' + quotename(@tablename) + '' 

execute sp_executesql @q_getrowNumber, N'@rownumber int output', @rownumber output 

該代碼部分返回一個值(112)。但是,當我改變@羅斯卡爾

Set @rowcount = 2 

然後代碼工作。我想轉換成整數@RowCount,但它沒有工作

+5

請解釋。你會得到什麼樣的行爲或錯誤信息? –

+4

這是什麼意思 - 「不工作」。 ??? – valex

+0

錯誤是在while循環這裏while(i <= rowNumber)當你嘗試增加@i值設置i = i + 1它會進入一個循環,並檢查是否仍然我<= rowNumber我認爲循環不是獲得rownumber –

回答

0

可能這是你在找什麼 - 「它不工作」

declare @i int = 1 
declare @rownumber int = 2 
declare @result_set table (value varchar(1000)) 
declare @q_getoldeMail nvarchar(max) 
declare @columnname varchar(100) = 'name' 
declare @tablename varchar(100) = 'sys.columns' 
--select * from sys.columns 

Set @i = 1 
While(@i <= @rowNumber) 
BEGIN 
    Set @q_getoldeMail = 'SELECT Lower('[email protected]+') FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY object_ID) AS rownumber 
     ,object_id 
     ,name 
    FROM ' + (@tablename) + ') AS ar Where rownumber = '+convert(varchar,@i)+'' 

    insert into @result_set 
    exec sp_executesql @q_getoldeMail 

    Set @i = @i+1 
end 

select * from @result_set 
+0

我將如何最大rownum從表 –