SQL Server 2008で、一時テーブルのデータを既存のテーブルに挿入するプロシージャを作成しようとしています。私はそれをかなり理解したと思います、私はループに問題があるだけです。ループをいつ終了するかを決定するには、一時テーブルの行数が必要です。
@@ROWCOUNTを2つの異なる方法で使用してみました。WHILEステートメントでそれ自体を使用し、最初のループが終了したときに値を保持しようとする変数を作成します(以下のコードを参照)。
これらの方法はどちらもうまくいきませんでした、そして私は今何をすべきかについて途方に暮れています。この状況で@@ROWCOUNTを使用することは可能ですか、それとももっとうまくいく別の方法がありますか?
CREATE PROCEDURE InsertData(@KeywordList varchar(max))
AS
BEGIN
--create temp table to hold words and weights
CREATE TABLE #tempKeywords(ID int NOT NULL, keyword varchar(10) NOT NULL);
DECLARE @K varchar(10), @Num int, @ID int
SET @KeywordList= LTRIM(RTRIM(@KeywordList))+ ','
SET @Num = CHARINDEX(',', @KeywordList, 1)
SET @ID = 0
--Parse varchar and split IDs by comma into temp table
IF REPLACE(@KeywordList, ',', '') <> ''
BEGIN
WHILE @Num > 0
BEGIN
SET @K= LTRIM(RTRIM(LEFT(@KeywordList, @Num - 1)))
SET @ID = @ID + 1
IF @K <> ''
BEGIN
INSERT INTO #tempKeywords VALUES (@ID, @K)
END
SET @KeywordList = RIGHT(@KeywordList, LEN(@KeywordList) - @Num)
SET @Num = CHARINDEX(',', @KeywordList, 1)
--rowcount of temp table
SET @rowcount = @@ROWCOUNT
END
END
--declaring variables for loop
DECLARE @count INT
DECLARE @t_name varchar(30)
DECLARE @key varchar(30)
DECLARE @key_weight DECIMAL(18,2)
--setting count to start from first keyword
SET @count = 2
--setting the topic name as the first row in temp table
SET @t_name = (Select keyword from #tempKeywords where ID = 1)
--loop to insert data from temp table into Keyword table
WHILE(@count < @rowcount)
BEGIN
SET @key = (SELECT keyword FROM #tempKeywords where ID = @count)
SET @key_weight = (SELECT keyword FROM #tempKeywords where ID = @count+2)
INSERT INTO Keyword(Topic_Name,Keyword,K_Weight)
VALUES(@t_name,@key,@key_weight)
SET @count= @count +2
END
--End stored procedure
END