2011-05-17 8 views
5

estoy intentando algo como:¿Puedo usar DISTINCT en la cláusula OUTPUT?

INSERT INTO MyTable (
     Col1 
     ,Col2) 
OUTPUT DISTINCT -- issue is with DISTINCT 
     INSERTED.Col1 
     ,@otherParameter 
     INTO IdListTable 
SELECT ColA 
     ,ColB 
     ,SUM(ImportantNumber) 
FROM MyOtherTable 
GROUP BY ColA, ColB 

Excepto SQL no quiere que yo use DISTINCT en la cláusula OUTPUT. La solución que pensé fue crear una tabla temporal para la salida, luego INSERT DISTINCT en el IdListTable. ¿Alguna idea sobre una solución alternativa?

Respuesta

3

Reemplace IdListTable con una tabla temporal (o una variable de tabla según el número de filas) en la instrucción de salida. A continuación, ejecute una segunda instrucción Insert en IdListTable desde la tabla temporal con un Seleccionar distintivo.

INSERT INTO MyTable (
     Col1, 
     Col2) 
OUTPUT 
     INSERTED.Col1, 
     @otherParameter 
     INTO #tempIdListTable 
SELECT ColA, 
     ColB, 
     SUM(ImportantNumber) 
FROM MyOtherTable 
GROUP BY ColA, ColB 

Insert into IdListTable 
Select distinct col1, col2 from #tempIdListTable 
+0

Esto es lo que estoy haciendo actualmente, esperaba poder hacer una sola declaración. – Brad

+0

No creo que sea compatible con ningún tipo de agrupamiento o clasificación en la cláusula de Salida; Creo que debes dejarlo como dos declaraciones separadas. –

+0

@JeffSiver puede usar ignore_dup_key en la tabla de destino para hacer esto en una toma – gordy

Cuestiones relacionadas