カーソル内のデータを順序付けるにはどうすればよいですか? を使用できますorder by clause
か?
最初にデータを並べ替える必要があるためです。
そのように:
DECLARE cur CURSOR FOR
(
SELECT * FROM
(
SELECT TOP 9999999999 -- Necessary...
col_1
,...
,col_n
FROM TABLE_XY
ORDER BY WHATEVER
) AS TempTableBecauseSqlServerSucks
)
実際の例:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_DELDATA_Delete_NON_SOFT_ByForeignKeyDependency]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[sp_DELDATA_Delete_NON_SOFT_ByForeignKeyDependency]
GO
-- =============================================
-- Author: Stefan Steiger
-- Create date: 22.06.2012
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[sp_DELDATA_Delete_NON_SOFT_ByForeignKeyDependency]
AS
BEGIN
DECLARE @ThisCmd varchar(500)
DECLARE cur CURSOR
FOR
(
SELECT * FROM
(
SELECT TOP 9999999999
-- Lvl
--,TableName
--,
'DELETE FROM [' + TableName + '] WHERE [' +
(
SELECT
INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = V_DELDATA_Tables_All.TableName
AND INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%Status'
) + '] = 99; ' AS cmd
FROM V_DELDATA_Tables_All
WHERE (1=1)
AND TableName LIKE 'T_%'
AND TableName NOT LIKE 'T_Ref_%'
AND TableName NOT LIKE 'T_RPT_%'
AND TableName NOT LIKE 'T_Import_%'
AND TableName NOT LIKE 'T_Export_%'
ORDER BY Lvl DESC, TableName ASC
) AS SqlServerSucks
) --End For
OPEN cur
FETCH NEXT FROM cur INTO @ThisCmd
WHILE @@fetch_status = 0
BEGIN
PRINT @ThisCmd
--EXECUTE(@ThisCmd)
FETCH NEXT FROM cur INTO @ThisCmd
END
CLOSE cur
DEALLOCATE cur
END
GO
どのデータベースを使用しているかはわかりませんが、SQL Server では可能です。
例:
DECLARE vendor_cursor CURSOR FOR
SELECT VendorID, Name
FROM Purchasing.Vendor
WHERE PreferredVendorStatus = 1
ORDER BY VendorID
それに問題があったことは知っていますが、それを使用して解決できます
select * from (select a, b from t order by a)
何らかの理由で、他のサブクエリベースの回答がうまくいきませんでした。SQL Server 2012 で行をドロップし続けました。この特定のケースでは、テーブル データと交差する静的データのビューから最大 100 行を選択していました。
解決策は、カーソルを「forward_only static」として宣言することでした:
declare mappingsCursor cursor local forward_only static for
select top 2000000000
a, b, c, d
from MappingsView
order by a, b, c, d;
リンク: ORDER by を使用した選択のために開かれたカーソルが後続のテーブルへの更新を反映しない理由
オーダーがあるときのデフォルトのカーソルタイプを知っている人はいますか? 「静的」データに対して常に機能しないのはなぜですか?