Desejo replicar um conjunto de linhas em uma tabela, mas com manipulação de coluna exclusiva no SQL Server 17. A tabela é:
CREATE TABLE test1 (
id int CONSTRAINT PK_test1 PRIMARY KEY CLUSTERED IDENTITY,
name nvarchar(10) CONSTRAINT UK_test1 UNIQUE NONCLUSTERED,
value int,
type varchar(20)
);
O conteúdo da tabela é:
INSERT INTO test1 VALUES ('e_1',1,'A');
INSERT INTO test1 VALUES ('342A',34,'ABC');
INSERT INTO test1 VALUES ('Tame_33',277,'Test10');
Agora desejo replicar essas linhas várias vezes, mas o problema é com a coluna NAME, que é ÚNICA. A solução que fiz até agora é apenas o uso de um cursor, mas isso é ineficiente e estou curioso se isso pode ser feito de maneira mais eficiente?
DECLARE @id int;
DECLARE @name nvarchar(20);
DECLARE @value int;
DECLARE @type varchar(10);
DECLARE @cnt int = 0;stackoverflow
DECLARE @intcnt int = 0;
DECLARE temp_cursor CURSOR FOR
SELECT * FROM test1
OPEN temp_cursor;
FETCH NEXT FROM temp_cursor INTO @id,@name,@value,@type;
WHILE @@FETCH_STATUS = 0
BEGIN
WHILE @intcnt < 5
BEGIN
INSERT INTO test1 VALUES
('ins_' + CONVERT(varchar,@intcnt) + '_' + CONVERT(varchar,@cnt), @value, @type);
SET @intcnt = @intcnt + 1;
END
SET @intcnt = 0;
FETCH NEXT FROM temp_cursor INTO @id,@name,@value,@type;
SET @cnt = @cnt + 1;
END
CLOSE temp_cursor;
DEALLOCATE temp_cursor;