2017-07-04 155 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