2017-07-04 152 views
0

有沒有辦法強制語句在while循環中運行選擇一次, 例如:僅打破while循環中select語句和while循環創建多個表

WHILE(@NUMBERCOUNTER <@TOTALNUMBER) 
BEGIN 
Declare @Table2(
Id nvarchar(10) 
); 
Insert into @Table2 
SELECT * FROM MainTable where Id in (select Id from Table1) 

Insert into @Table2 
SELECT * FROM MainTable where Id in (select Id from Table2) 
END 

我想要運行此行

SELECT * FROM MainTable where Id in (select Id from TABLE1) 

一次,然後其他選擇連續運行,直到它符合While標準。

此外,有沒有一種方法來分隔多個表中的每個選擇數據。我不希望第二次選擇的結果與第一次混合。

現在的問題是我無法移動while循環之外的select語句,因爲它無法選擇@ Table2。而且我無法在while循環外部創建@ Table2,數據將被混合。

注意:表1在循環外創建

在此先感謝!

回答

1

第一個問題: 您可以添加標誌例如爲:

DECLARE @flag bit = 0 
WHILE(@NUMBERCOUNTER <@TOTALNUMBER) 
BEGIN 
Declare @Table2(
Id nvarchar(10) 
); 
IF @flag = 0 
BEGIN 
Insert into @Table2 
SELECT * FROM MainTable where Id in (select Id from Table1) 
SET @flag = 1; 
END 

Insert into @Table2 
SELECT * FROM MainTable where Id in (select Id from Table2) 

SET @NUMBERCOUNTER = @NUMBERCOUNTER + 1; --You had infinite loop 
END 

此外,有沒有一種方式,在每一個選擇的倍數表中分離數據。我不希望第二次選擇的結果與第一次混合。

將標誌添加到您的表@表2中從哪個錶行開始,並將其包含到您的選擇語句中。

+0

感謝您的回覆!對於第二個問題,如果while循環超過3次,則在select語句內將標誌添加到@Table將導致子查詢出現問題。我想知道是否可以在while循環中創建多個表。例如: 聲明@Table [@NumberCounter] TableNumber對應循環編號 – LegendDemonSlayer

+0

@LegendDemonSlayer哦,那樣。因此,您將需要使用動態sql來以合適的名稱動態聲明表。有教程[鏈接](https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/)。 你想用表格變量做什麼?你想在while循環之後使用它們嗎? 在我看來,這將是非常難以編碼的。 – Rokuto

+0

謝謝。是的,我需要將表返回到.NET Core API(對不起,如果這是有點偏離)。因此,如果我有4個表格,我會將4個表格的結果返回到.NET Core API,然後這將顯示在html上。 – LegendDemonSlayer