2016-10-25 3 views
0

Я хочу выполнить свой запрос select в цикле 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 

В остальном, я пытался выполнить запрос без во время цикла, как это:

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 

Это не работает, либо. Какая у меня ошибка? Есть ли способ получить значение от Select с помощью цикла While? Вы можете мне помочь?

РЕДАКТИРОВАТЬ:

Я установил @rowcount значение в этой части кода:

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

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

Эта часть кода возвращает значение (112). Но когда я изменяю @rowcount

Set @rowcount = 2 

тогда код работает. Я попытался преобразовать в целое @rowcount, но он не работает

+5

«это не работает.» Пожалуйста, объясни. Какое поведение или сообщение об ошибке вы получаете? –

+4

Что это значит - «НЕ РАБОТАЕТ». ??? – valex

+0

Ошибка в цикле While Здесь While (i <= rowNumber) Когда вы пытаетесь увеличить значение @i Установите значение i = i + 1. Он пойдет в цикле и проверяет, все еще i <= 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

как я буду max rownum из таблицы –

 Смежные вопросы

  • Нет связанных вопросов^_^