2014-07-15 3 views
-1

В моей таблице продуктов у меня 14 продуктов, и для каждого продукта мне нужна строка для каждого состояния в США. Я пытаюсь сделать это в следующем:Вложенные SQL-курсоры

begin tran 
declare @state varchar(2), 
     @productId int 

declare stateCursor CURSOR FOR 
select distinct [State] 
from lookUpAreaFactor 

declare productCursor CURSOR FOR 
select distinct productid 
from Product 


open stateCursor 
open productCursor 
FETCH NEXT from stateCursor into @state 
fetch next from productCursor into @productId 
while @@FETCH_STATUS = 0 
BEGIN 

     while @@FETCH_STATUS = 0 
     BEGIN 
      insert into ProductToState (ProductID,[State]) values (@productId,@state) 
      fetch next from productCursor into @productId 
     END 
    fetch next from stateCursor into @state 
END 

close stateCursor 
close productCursor 
select * from producttostate 
rollback 

Это разбомбить после первого продукта - но это даже не вставляя строку для всех 50 государств. Я мог бы использовать другую пару глаз. Что я здесь делаю неправильно?

+0

какая СУБД вы используете? –

+0

Я использую MSSMS – reds184

+0

MSSQL? Какая версия? –

ответ

5

Почему вы используете курсоры для чего-то, что работает на основе набора?

Я думаю, что этот запрос делает то, что вы хотите:

insert into ProductToState(ProductID, [State]) 
    select ProductId, State 
    from (select distinct [State] from lookUpAreaFactor) s cross join 
     (select distinct ProductId from Product) p; 
+0

Я не был уверен, что смогу сделать это по-другому. Благодаря! – reds184

1

вам нужно использовать курсоры? Если вы этого не сделаете, вы можете сделать это с помощью простого перекрестного соединения

INSERT INTO ProductToState 
     ([STATE], productid) 
SELECT DISTINCT s.[State], p.productid 
FROM products p CROSS JOIN lookUpAreaFactor s 

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

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