1

我有两张桌子FOREIGN KEY([Table_ID])

Columns

ID       Table_ID       ActiveFlag
1        1              0
2        2              1
3        1              1
4        3              0

Sys_Tables

Table_ID       Name
1              Request
2              Plan
3              Contecst

我正在编写一个存储过程,它返回每个表的任何列。

上述值的示例输出

--first output table
ID       Table_ID       ActiveFlag
1        1              0
3        1              1
--second output table
ID       Table_ID       ActiveFlag
2        2              1
--third output table
ID       Table_ID       ActiveFlag
4        3              0

我的想法是这样的

Select c.*             
from Ccolumns c
     inner join Sys_tables t
    on t.Table_ID = c.Table_ID and t.Table_ID = @Parameter

我的问题,我不知道如何为每一行创建一个循环。我需要最好的方法。示例我可以使用以下循环:

DECLARE @i int = 0
DECLARE @count int;
select @count = count(t.Table_ID)
from Sys_tables t
     WHILE @i < @count BEGIN
    SET @i = @i + 1
--DO ABOVE SELECT   
END

但这并不完全正确。例如我的 Sys_tables 这样的数据可能是

Table_ID       Name
1              Request
102            Plan
1001           Contecst

你有什么主意吗?

4

2 回答 2

1

有几种方法可以实现:循环和游标,但首先你需要知道这是一个坏主意:两者都非常慢,无论如何,这里有一些循环示例:

declare @row_ids table (
    id INT IDENTITY (1, 1),
    rid INT
); 
insert into @row_ids (rid) select someIdField from SomeTable

declare @cnt INT = @@ROWCOUNT
declare @currentRow INT = 1

WHILE (@currentRow <= @cnt)
BEGIN
    SELECT rid FROM @row_ids WHERE id = @currentRow
    SET @currentRow = @currentRow + 1
END
于 2013-08-08T07:23:55.900 回答
0

我猜你使用的是 SQL Server,对吧?

然后,您可以CURSOR在此处使用:How to write a cursor inside a stored procedure in SQL Server 2008

于 2013-08-08T07:11:33.373 回答