2010-07-28 2 views
0

Может кто-нибудь сказать, почему этот запрос не работает?Почему @Table не работает для меня?

DECLARE @unwantedRows TABLE 
( 
    ProductId INT, 
    ProductName VARCHAR(50), 
    Description VARCHAR(50), 
    Category VARCHAR(50), 
    Repetitions VARCHAR(50) 

); 

Select * 
INTO @unwantedRows From 
(
Select a.*,Row_Number() Over(Partition By ProductId Order By ProductId) As [Repetitons] from tblProduct a 
) As A 

Where A.Repetitons > 1 

Ошибка я получаю

`Msg 102, Level 15, State 1, Line 12 Неправильный синтаксис около '@unwantedRows'. Msg 156, Level 15, State 1, Line 15 Неверный синтаксис рядом с ключевым словом «As».

Edit:

Теперь это дает с Repetitions: -

INSERT 
INTO @unwantedRows 
Select a.*,Row_Number() Over(Partition By ProductId Order By ProductId) As [Repetitons] from tblProduct a 
Where a.Repetitons > 1 

`

Invalid column name 'Repetitons'.

+0

проверка обновлена ​​вставка запроса –

+0

Вы видите повторы неправильно в запросе, но не в таблице. – HLGEM

ответ

1

Одна ошибка я нашел, его не выбрать в его выберите .. вставить в заявление

После запроса работает нормально без ошибок то есть ошибка синтаксиса

DECLARE @unwantedRows TABLE 
( 
    ProductId INT, 
    ProductName VARCHAR(50), 
    Description VARCHAR(50), 
    Category VARCHAR(50), 
    Repetitions VARCHAR(50) 

); 

insert INTO @unwantedRows 
Select a.*,Row_Number() Over(Partition By ProductId Order By ProductId) As [Repetitons] from tblProduct 
Where A.Repetitons > 1 

insetead из вышеупомянутого запроса вы также можете попробовать этот

insert INTO @unwantedRows 
select * from (
Select a.*,Row_Number() Over(Partition By ProductId Order By ProductId) As [Repetitons] from tblProduct) d 
Where d.Repetitons > 1 
+0

Пожалуйста, прочитайте мой отредактированный пост. Btw, 'Где A.Repetitons> 1' должно быть' Где a.Repetitons> 1' – TCM

+0

sql не чувствителен к регистру, так что это будет работать –

+0

Nice. Но на этот раз есть ошибка. Это должен быть 'tblProduct a' вместо' tblProduct'. Спасибо, это работает. Проголосовал – TCM

1

Потому что select into создает таблицу, и вы хотите insert into @unwantedRows select * from ...


EDIT

И потом, вы не можете использовать функцию окна (например, Partition) в п Where. Если вы должны сделать это, оберните ваш выбор в другой выбор:

select * from (select * from ...) as a where a.Partition > 1 
+0

Прочтите мой отредактированный пост. – TCM

+1

Хорошо. Пожалуйста, прочитайте мой отредактированный ответ :) – GSerg

1

Вам нужно удалить SELECT INTO, и вам нужно указать свои столбцы.

INSERT @unwantedRows 
SELECT a.ProductID, a.ProductName, a.Description, a.Category, a.Repetitions 
FROM (
    Select *, Row_Number() Over (Partition By ProductId Order By ProductId) As [Repetitons] 
    from tblProduct) As A 
Where A.Repetitons > 1; 
0
insert into @unwantedRows 
Select * from 
(
Select a.*,Row_Number() Over(Partition By ProductId Order By ProductId) As [Repetitons] from tblProduct a 
) As A 
Where A.Repetitons > 1 
+0

Я думаю, что в 'Select' отсутствует ключевое слово' from'? – TCM

+0

Yep thanx на кончике, я отредактировал свой ответ, Здесь на SO так спешит ответить сначала, что у меня не было времени на проверку прав – adopilot

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