我正在尝试使用此表格中的值填充表格
CREATE TABLE PLATOS(Idplatos integer PRIMARY KEY, Tipo varchar(20), PlatoP varchar(20));
INSERT INTO Platos VALUES('1','entrada','ceviche');
INSERT INTO Platos VALUES('2','entrada','arrozleche');
INSERT INTO Platos VALUES('3','sopa','caldo');
INSERT INTO Platos VALUES('4','sopa','mote');
INSERT INTO Platos VALUES('5','plato','lomo');
INSERT INTO Platos VALUES('6','plato','rusa');
对此:
Create table abril2017(nrodia integer,entrada varchar(20), sopa varchar(20), plato varchar(20),unique(entrada,sopa,plato));
我试过这段代码
declare @nd int
set @nd=1
while @nd<=31
begin
Insert into abril2017 values (@nd,
(Select TOP 1 PlatoP from Platos where tipo = 'entrada' oRDER BY NEWID()),
(Select TOP 1 PlatoP from Platos where tipo = 'sopa' Order by NewId()),
(Select TOP 1 PlatoP from Platos where tipo = 'plato' oRDER by NewId()))
SET @nd=@nd+1
end
到目前为止,结果还可以,但我不想要的错误是:
1)nrodia,只有当成功插入时,才必须为+1 始终是+1,这破坏了他的目的。 nrodia的意思是“daynumber”。
2)违反UNIQUE KEY约束 'UQ__abril201__24030ECAAB418A64'。无法插入重复键 对象'dbo.abril2017'。重复的键值是(arrozleche,mote, LOMO)。声明已经终止。
出现此错误,但无论如何我的所有值都插入而没有重复,我只是不想在执行插入的最后一个代码时显示这个或类似的东西,我不知道这是一个错误还是只是相似的东西?。 最后代码工作,只有那些问题必须修复,第一个表实际上有15个值而不仅仅是6,所以万一有人可以为我提供更多值的情况的解决方案会更好,谢谢。
1 arrozleche caldo lomo
3 arrozleche mote lomo
4 ceviche mote lomo
5 ceviche mote rusa
7 arrozleche mote rusa
8 ceviche caldo rusa
11 ceviche caldo lomo
16 arrozleche caldo rusa
如何看到所有可能的组合来自第一个表中不重复的值(但仍然显示问题编号2)),左边的数字必须是1,2,3 ..直到最后一行,在这种情况下为8.这只是一个例子,如果你使用代码插入,你会有一个不同的表,因为插入的值是随机的。
答案 0 :(得分:0)
你可以这样做:
declare @nd int
set @nd=1
DECLARE @xEntrada VARCHAR(20), @xSopa varchar(20), @xPlato varchar(20)
DECLARE @xResultCount INT = 8
while @nd<=31
begin
Select TOP 1 @xEntrada = PlatoP from Platos where tipo = 'entrada' oRDER BY NEWID()
Select TOP 1 @xSopa = PlatoP from Platos where tipo = 'sopa' Order by NewId()
Select TOP 1 @xPlato = PlatoP from Platos where tipo = 'plato' oRDER by NewId()
IF (NOT EXISTS(SELECT 1 FROM abril2017 WHERE Entrada = @xEntrada AND Sopa = @xSopa AND Plato = @xPlato))
BEGIN
Insert into abril2017 values (@nd,@xEntrada,@xSopa,@xPlato)
SET @nd=@nd+1
SET @xResultCount = @xResultCount - 1
IF(@xResultCount = 0)
BREAK
END
END;