2014-10-10 2 views
0

У меня проблема с размещением ROW_NUMBER в нужном месте, в то время как я использую переменные в моем запросе.Функция и переменные Row_number

Я хочу создать функцию поиска, проверив каждую запись с первой до последней записи. Есть что-то, с чем я не справляюсь с функцией ROW_NUMBER(). Какие-нибудь советы?

/* DECLARATION */ 
... 
/* LOOKUP */ 
SET @MAXID = (SELECT COUNT(ContractNr) FROM SenoOud.dbo.Financieel) 
SET @COUNTER = 1 
WHILE @COUNTER < @MAXID 
    BEGIN 
     SELECT @ROWNUM = ROW_NUMBER() OVER (ORDER BY ContractNr) AS 'CNUM', 
       @IGAS = [Factuur CO/LPG], 
       @IBRAND = [Factuur Brand], 
       @IOVERIG = [Factuur Overig], 
     FROM SenOoud.dbo.Financieel 
     WHERE @ROWNUM = @COUNTER 
/* INSERTION */ 
... 
+0

Возможно, вы захотите взглянуть на SQL curso RS. Я думаю, что они будут лучшим решением, чем это :) – Luaan

+0

Возможно, вы захотите взглянуть на подход, основанный на наборе SQL, чтобы избежать цикличности и курсора, где это возможно, например здесь: http://blogs.msdn.com/b /simonince/archive/2009/03/30/procedural-versus-set-based-sql.aspx :) – NickyvV

+0

Зачем вам это нужно? Вероятно, это лучшее решение для более широкой проблемы с использованием подхода, основанного на наборе. – Serpiton

ответ

1

Я думаю, что этот подход будет работать лучше всего

SELECT Row_number() 
     OVER (
      ORDER BY ContractNr) AS RNUM, 
     [Factuur CO/LPG], 
     [Factuur Brand], 
     [Factuur Overig] 
INTO #TEMP 
FROM SenOoud.dbo.Financieel 


SET @MAXID = @@ROWCOUNT 
SET @COUNTER = 1 
WHILE @COUNTER < @MAXID 
    BEGIN 
     SELECT top 1 @ROWNUM =RNUM, 
      @IGAS = [Factuur CO/LPG], 
      @IBRAND = [Factuur Brand], 
      @IOVERIG = [Factuur Overig] 
     FROM #TEMP 
     WHERE RNUM = @COUNTER 

     SET @[email protected] + 1 
END 

Я добавил топ 1 на всякий случай

+0

Согласен. Как обаяние, большое вам спасибо. EDIT: просто нужно создать псевдоним для секции #TEMP –

1
SELECT @IGAS = [Factuur CO/LPG], 
     @IBRAND = [Factuur Brand], 
     @IOVERIG = [Factuur Overig] 
FROM (SELECT Row_number() 
       OVER (
        ORDER BY ContractNr) AS ROWNUM, 
       [Factuur CO/LPG], 
       [Factuur Brand], 
       [Factuur Overig] 
     FROM SenOoud.dbo.Financieel) A 
WHERE ROWNUM = @COUNTER 

Если вы все еще получаете ошибки попробуйте это то же самое я сделал с данными выборки

CREATE TABLE #temp 
    (
    col1 VARCHAR(50), 
    col2 VARCHAR(50), 
    col3 VARCHAR(50) 
) 

SELECT * 
FROM #temp 

INSERT INTO #temp 
VALUES  ('1','A319','zvxfsdg'), 
      ('2','efg','ddfgdfg'), 
      ('3','xdfg','ddfgxfgdfg') 

SELECT col1, 
     col2, 
     col3 
FROM (SELECT Row_number() 
       OVER (
        ORDER BY col1) AS ROWNUM, 
       col1, 
       col2, 
       col3 
     FROM #temp) A 
WHERE ROWNUM = 1 
+0

Да, я тоже понял подзапрос, но это дает мне неправильный синтаксис. Yours дает мне неправильный синтаксис рядом с 'A' –

+0

Проверить сейчас ранее с ошибкой –

+0

Тот же неправильный синтаксис рядом с 'A' –

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