2010-03-10 15 views
5

Ho bisogno di duplicare una riga cambiando il PK. La tabella può essere diversa in ogni installazione client, quindi non posso semplicemente enumerare le colonne. Sono riuscito a effettuare le seguenti operazioni:Come copiare una riga di QUALSIASI tabella cambiando una colonna

INSERT INTO table SELECT * FROM table WHERE PK='value' 

ma ovviamente non è riuscito perché sto cercando di duplicare la PK.

Poi ho provato:

INSERT INTO table SELECT 'newValue' AS PK, * FROM table WHERE PK='value' 

Inoltre fallito, perché i nomi delle colonne non corrisponde.

So che il PK sarà sempre la prima colonna, ma non sono sicuro che sia di grande utilità.

Quindi ... è possibile? Qualche idea?

risposta

7

L'unica soluzione è creare la query dinamicamente interrogando il suo elenco di colonne e escludendo la colonna Identity (motivo per cui suppongo che desideri saltare il PK).

+0

Naturalmente, PK è l'abbreviazione di Chiave primaria. – raven

+0

Poiché non ci sono risposte migliori, lo accetto, che sembra essere corretto. – raven

2
INSERT INTO table1 (col1_PK, col2 col3) 
SELECT newValue, col2, col3 
FROM table1 
WHERE col1_PK = 'Value' 
+2

Come ha detto l'OP, non conosce i nomi delle colonne in anticipo. –