while ループで選択式を使用する必要があり、以下のサンプル コードを使用します。
declare @i integer
set @i=1
while (@i<10)
begin
select @i as m;
set @i=@i+1
END
このコードは 10 個の個別のテーブルを返します! すべての選択結果を 1 つのテーブルに返したいのですが、それは可能ですか? はいの場合...どのように?
while ループで選択式を使用する必要があり、以下のサンプル コードを使用します。
declare @i integer
set @i=1
while (@i<10)
begin
select @i as m;
set @i=@i+1
END
このコードは 10 個の個別のテーブルを返します! すべての選択結果を 1 つのテーブルに返したいのですが、それは可能ですか? はいの場合...どのように?
これには、一時テーブルまたはテーブル変数を使用できます。
一時テーブルを使用してそれを行う方法は次のとおりです。
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
それは不可能。各SELECT
ステートメントは、独自の結果セットを生成します。一時テーブルを使用して、各反復の結果を追加し、すべてを 1 つのテーブルに取得できます。整数のシーケンスを生成するには、これを使用できます (SQL SERVER 2005 + の場合)
;WITH CTE
AS
(
SELECT 1 N
UNION ALL
SELECT N + 1 FROM CTE
WHERE N<10
)
SELECT N FROM CTE
squillman はそれを取得しました... #t (テーブルを作成します # - セッションが開いている間、トップレベルのスコープで保持されるテーブル - いくつかのバッチ ステートメントがある場合は、テーブルを削除するまで宣言後にこのテーブルを参照できます)
Cris も @test で取得しました (@ テーブルを宣言 - 変数 - 現在のスコープでのみ永続化 - 単一の実行バッチ ブロック...これを使用すると、いくつかのパフォーマンスの問題が発生する可能性があることに注意してください)
使用できる最後のタイプの一時テーブルはグローバル一時テーブルです (テーブルを作成します ## - それを作成したセッションが開いている限り、または削除されるまで続きます)
#t を使用して、セッションを閉じない場合は、これをスクリプトの先頭に追加することをお勧めします。
IF OBJECT_ID('tempdb..#t') IS NOT NULL
DROP TABLE #t
一時テーブルをお楽しみください。
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