すべての行を 2 回返すクエリが必要です。ユニオンを使用することはできません (インデックス付きビューになる必要があるため)。
誰でもそれを行う方法を知っていますか?
(だからこれは私にはできません:)
select * from tags
union all
select * from tags
すべての行を 2 回返すクエリが必要です。ユニオンを使用することはできません (インデックス付きビューになる必要があるため)。
誰でもそれを行う方法を知っていますか?
(だからこれは私にはできません:)
select * from tags
union all
select * from tags
別のテーブルを作成する準備ができている場合は、次のようにして問題を解決できます。
create table duplicator (id int)
insert into duplicator values (1),(2)
go
create view dups with schemabinding
as
select tags.column1, tags.column2, ... , duplicator.id
from dbo.tags
cross join dbo.duplicator
go
create unique clustered index ix_dups on dups(tags.PK, id)
select row_number() over (order by columnnamehere), *
from
(
select * from tags
union all
select * From tags
) a
複製する行数を保持するテーブルを作成し、それに対してクロス結合を実行できます。
DECLARE @tblOrig table (PK int, fruitName varchar(20));
insert @tblOrig values (1, 'Apple');
insert @tblOrig values (2, 'Banana');
insert @tblOrig values (3, 'Pear');
DECLARE @tblDup table (DuplicateNumber int);
insert @tblDup values (1);
insert @tblDup values (2);
select t1.*
from @tblOrig t1
cross join @tblDup
with temp(idx) as (
select 1 as idx union select 2 as idx
)
select * from yourtable cross join temp
ユニオン (または CTE、それ自体へのクロス結合など) を使用してインデックス付きビューを作成することはできません。しかし、次のようなこともできます (列名と主キーについて仮定しています):
CREATE VIEW dbo.TagsView1
WITH SCHEMABINDING
AS
SELECT col1, col2 FROM dbo.tags;
GO
CREATE UNIQUE CLUSTERED INDEX x ON dbo.TagsView(col1);
それに対してユニオンを実行するビューを作成します。
CREATE VIEW dbo.TagsView2
AS
SELECT col1, col2 FROM dbo.TagsView1
UNION ALL
SELECT col1, col2 FROM dbo.TagsView1;
GO
これはあなたの要件をある程度満たしていますが、それでも要件が疑わしいと思います。これがインデックス付きビューであるべきだと思う理由を正確に説明できない限り。答えが「速くなるから」である場合、答えは間違っています。