いつもお世話になってます。
SQLSERVER 2014で動的クエリを作成中にふと疑問がでたので質問させて頂きます。
SELECT文を動的に作成する場合、以下のコードが存在したとします。(UNION前提)
SQL
1DECLARE @SQL NVARCHAR(4000), --SQL文格納用変数 2 @CD VARCHAR(2) --コード格納用変数 3 4DECLARE CUR CURSOR LOCAL FOR 5 SELECT CD FROM TESTDB.dbo.TEST_TBL --CDには1から10の文字列が取れると仮定 6 7OPEN CUR 8FETCH NEXT FROM CUR INTO @CD 9 10WHILE @FETCH_STATUS = 0 11BEGIN 12 SET @SQL = 'SELECT ' + @CD + ' UNION ' 13 FETCH NEXT FROM CUR INTO @CD 14END 15SET @SQL = SUBSTRING(@SQL,1,LEN(@SQL) - 7) -- 末尾のUNIONを省く 16 17CLOSE CUR 18EXECUTE(@SQL) 19 20OPEN CUR 21FETCH NEXT FROM CUR INTO @CD 22 23WHILE @FETCH_STATUS = 0 24BEGIN 25 SET @SQL = 'SELECT ' + @CD 26 FETCH NEXT FROM CUR INTO @CD 27 28 IF @FETCH_STATUS = 0 29 BEGIN 30 SET @SQL = @SQL + ' UNION ' --FETCH_STATUSが0のままであればUNIONを追加する 31 END 32END 33CLOSE CUR 34DEALLOCATE CUR 35EXECUTE(@SQL) 36
何れのループも1から10までの数値を出力します。
個人的な見解としてはループ文の中で完結している後者の書き方がよいではないのか?と考えていますが
ループ内で条件をつけるよりもループ後、末尾の文字列を排除すべきなのでは?という意見もあがり
書き方としてどちらが適しているのかがわからなくなりました。
書き方をご教示頂けますと幸いです。
よろしくお願い致します。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/21 13:02