我需要在while循环中使用select表达式,并使用下面的示例代码:
declare @i integer
set @i=1
while (@i<10)
begin
select @i as m;
set @i=@i+1
END
此代码返回10个单独的表!我希望它将所有选择结果返回到一个表中......这可能吗?如果是的话...怎么样?
答案 0 :(得分:5)
您可以使用临时表或表变量。
以下是使用临时表的方法。
CREATE TABLE #t (m INT)
DECLARE @i INT
SET @i=1
WHILE (@i<10)
BEGIN
INSERT INTO #t SELECT @i
SET @i=@i+1
END
SELECT m FROM #t
与表变量
非常相似DECLARE @t TABLE (m INT)
DECLARE @i INT
SET @i=1
WHILE (@i<10)
BEGIN
INSERT INTO @t SELECT @i
SET @i=@i+1
END
SELECT m FROM @t
答案 1 :(得分:4)
这是不可能的。每个SELECT
语句都会生成自己的结果集。您可以使用临时表来添加每个迭代的结果,然后在一个表中获取所有结果。要生成整数序列,可以使用它(对于SQL SERVER 2005 +)
;WITH CTE
AS
(
SELECT 1 N
UNION ALL
SELECT N + 1 FROM CTE
WHERE N<10
)
SELECT N FROM CTE
答案 2 :(得分:2)
Cris也通过@test获得它(声明@ table - 变量 - 仅保留在当前作用域中 - 单个执行批处理块...请注意,如果使用它,可能会引入一些性能问题)
您可以使用的最后一种临时表是全局临时表(创建表## - 只要创建它的会话保持打开状态或直到它被删除,就会持续)
使用#t,如果不关闭会话,可能需要将其添加到脚本的开头:
IF OBJECT_ID('tempdb..#t') IS NOT NULL
DROP TABLE #t
享受临时表!
答案 3 :(得分:1)
declare @i integer
DECLARE @test TABLE(
m /*your data type*/
)
set @i=1
while (@i<10)
begin
insert into @test select @i;
set @i=@i+1
END
select * from @test