カーソルからテーブル名を読み取る T-SQL に次のコードがあります。
WITH
しかし、ステートメント内のスコープ テーブル名変数に問題があります。
dbo.@sys_name
明示的にシノニム名に設定するとこのコードを実行できますdbo.mysysnonym
が、変数名として配置するdbo.@syn_name
と機能しません。
-- drop duplicates records from synonyms
DECLARE @syn_name varchar(50)
DECLARE s_cursor CURSOR FOR
SELECT name
FROM sys.synonyms
WHERE base_object_name LIKE 'xyz%'
OPEN s_cursor;
FETCH NEXT FROM s_cursor INTO @syn_name;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM s_cursor INTO @syn_name;
WITH dedupTable AS
(
SELECT
sys_id,
row_number() OVER (PARTITION BY sys_id ORDER BY sys_id) AS nr
FROM
dbo.@syn_name
)
DELETE FROM dedupTable
WHERE nr > 1
END;
CLOSE s_cursor
DEALLOCATE s_cursor