2014-06-24 42 views
-1

我試圖在查詢中的每條記錄的循環中調用一個存儲過程。爲查詢中的每一行調用存儲過程

這是我現在有:

WITH X AS ( 
SELECT customerid FROM DBcustomers 
) 
WHILE(EXISTS (SELECT * FROM X)) 
BEGIN 
    SELECT TOP 1 @Id = customerid FROM X 
    EXEC [dbo].[AnotherSP] @Id , 1 
    DELETE FROM X WHERE customerid = @Id 
END 

,但這並不編譯。

+0

這應該是什麼? –

+0

這將對所有行執行更新操作 - (想要實現循環) –

+0

你不能做你想做的事 - 因此錯誤。你不需要循環,但如果你想要 - 查找光標 –

回答

1

我猜你想要做UPDATE這樣的:

UPDATE ProductTable SET IsActive = 1 
    WHERE customerid IN (SELECT customerid FROM DBcustomers)  

或者您編輯的問題使用光標:

DECLARE @id BIG 
DECLARE Customers CURSOR 
FOR SELECT customerid FROM DBcustomers 

OPEN Customers FETCH NEXT FROM Customers INTO @id 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXEC [dbo].[AnotherSP] @id , 1 
    FETCH NEXT FROM Customers INTO @id 
END 
CLOSE Customers 
DEALLOCATE Customers 
+0

請檢查我的編輯。這是我想要執行的。 –

+0

我想執行其他Store Proc。在while循環中。 –

+0

其實我並不贊成使用CURSOR,但這會適用於我想要的。 –

0
UPDATE productTable 
SET  isActive = 1 
WHERE customerId IN 
     (
     SELECT customerId 
     FROM dbCustomers 
     ) 

更新:

DECLARE cr_customer CURSOR 
FOR 
SELECT customerId 
FROM dbCustomers 

DECLARE @id INT 

FETCH NEXT 
FROM cr_customer 
INTO @id 

WHILE @@FETCH_STATUS = 0 
BEGIN 
     EXEC anotherSP @id , 1 
     FETCH NEXT 
     FROM cr_customer 
     INTO @id 
END 

CLOSE cr_customer 

DEALLOCATE 
     cr_customer 
+0

請檢查我的編輯。這是我想要執行的。 –

+0

我想執行其他Store Proc。在while循環中。 –

0

小號像這樣的東西可能會這樣做:

DECLARE @Id INT; 
SELECT TOP 1 @Id = customerid FROM DBcustomers ORDER BY customerid; 
WHILE @Id IS NOT NULL 
BEGIN 
    EXEC [dbo].[AnotherSP] @Id, 1; 
    DECLARE @LastId INT; 
    SELECT @LastId = @Id; 
    SELECT @Id = NULL; 
    SELECT @Id = customerid FROM DBcustomers WHERE customerId > @LastId ORDER BY customerid; 
END; 
相關問題