Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

insert select avec une colonne identity

6 réponses
Avatar
jerome
Bonjour,

J'ai des duplications de données à faire par procédures et je cherche à
faire des insert into myTable select from myTable mais le problème est que
j'ai une colonne de type indentity et que, évidemment, je ne peux insérer la
valeur de cette colonne.
Existe-t-il un moyen de contourner ce problème sans avoir à passer
explicitement tous les noms de colonne comme paramètres de l'insert ?

Merci

6 réponses

Avatar
Leon
Dans tous les cas tu sera obligé de mettre explicitement les noms de
colonnes, par contre deux possibilitées pour la colonne identitiy
. soit tu concerve la valeur dans la table de destination dans ce cas la
colonne identity doit egalement être spécifié et rajouter l'option set
identity_insert dbo.myTableDestination on avant l'insertion
. soit tu change la valeur de l'identiy dans la table source, dans ce cas la
colonne identity ne doit pas être mentionné et l'option set identity_insert
dbo.myTableDestination off avant l'insertion

Leon


"jerome" a écrit :

Bonjour,

J'ai des duplications de données à faire par procédures et je cherche à
faire des insert into myTable select from myTable mais le problème est que
j'ai une colonne de type indentity et que, évidemment, je ne peux insérer la
valeur de cette colonne.
Existe-t-il un moyen de contourner ce problème sans avoir à passer
explicitement tous les noms de colonne comme paramètres de l'insert ?

Merci





Avatar
jerome
Merci.
Ca aurait été pourtant pratique le insert ... select * sauf identity.

"Leon" wrote in message
news:
Dans tous les cas tu sera obligé de mettre explicitement les noms de
colonnes, par contre deux possibilitées pour la colonne identitiy
. soit tu concerve la valeur dans la table de destination dans ce cas la
colonne identity doit egalement être spécifié et rajouter l'option set
identity_insert dbo.myTableDestination on avant l'insertion
. soit tu change la valeur de l'identiy dans la table source, dans ce cas


la
colonne identity ne doit pas être mentionné et l'option set


identity_insert
dbo.myTableDestination off avant l'insertion

Leon


"jerome" a écrit :

> Bonjour,
>
> J'ai des duplications de données à faire par procédures et je cherche à
> faire des insert into myTable select from myTable mais le problème est


que
> j'ai une colonne de type indentity et que, évidemment, je ne peux


insérer la
> valeur de cette colonne.
> Existe-t-il un moyen de contourner ce problème sans avoir à passer
> explicitement tous les noms de colonne comme paramètres de l'insert ?
>
> Merci
>
>
>


Avatar
Fred BROUARD
Bonjour,

contrairement à ce qui t'a été sit, il est inutile de mettre la liste de
toutes les colonnes si tu les prend toutes à l'exception de la colonne
dotée de la propriété IDENTITY.

Démo :

CREATE TABLE T_AUTOINC_ATI
(ATI_ID INT NOT NULL PRIMARY KEY IDENTITY,
ATI_DATA1 VARCHAR(16),
ATI_DATA2 VARCHAR(16))

INSERT INTO T_AUTOINC_ATI
VALUES ('abc', 'def')

SELECT *
FROM T_AUTOINC_ATI

ATI_ID ATI_DATA1 ATI_DATA2
----------- ---------------- ----------------
1 abc def

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
jerome a écrit :
Bonjour,

J'ai des duplications de données à faire par procédures et je cherche à
faire des insert into myTable select from myTable mais le problème est que
j'ai une colonne de type indentity et que, évidemment, je ne peux insérer la
valeur de cette colonne.
Existe-t-il un moyen de contourner ce problème sans avoir à passer
explicitement tous les noms de colonne comme paramètres de l'insert ?

Merci



Avatar
jerome
Bonjour et merci,

Il n'y aurait pas un moyen de "ruser" pour mettre un insert into
T_AUTOINC_ATI select * from T_AUTOINC_ATI where... et que ça ne bloque pas
sur la colonne identity tout en faisant en sorte que ATI_ID soit
correctement incrémenté ?

"Fred BROUARD" wrote in message
news:
Bonjour,

contrairement à ce qui t'a été sit, il est inutile de mettre la liste de
toutes les colonnes si tu les prend toutes à l'exception de la colonne
dotée de la propriété IDENTITY.

Démo :

CREATE TABLE T_AUTOINC_ATI
(ATI_ID INT NOT NULL PRIMARY KEY IDENTITY,
ATI_DATA1 VARCHAR(16),
ATI_DATA2 VARCHAR(16))

INSERT INTO T_AUTOINC_ATI
VALUES ('abc', 'def')

SELECT *
FROM T_AUTOINC_ATI

ATI_ID ATI_DATA1 ATI_DATA2
----------- ---------------- ----------------
1 abc def

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
jerome a écrit :
> Bonjour,
>
> J'ai des duplications de données à faire par procédures et je cherche à
> faire des insert into myTable select from myTable mais le problème est


que
> j'ai une colonne de type indentity et que, évidemment, je ne peux


insérer la
> valeur de cette colonne.
> Existe-t-il un moyen de contourner ce problème sans avoir à passer
> explicitement tous les noms de colonne comme paramètres de l'insert ?
>
> Merci
>



Avatar
Fred BROUARD
Non, le SELECT * est dfortement déconseillé. Il risque de ne plus
fonctionner dans certains cas....

A +

jerome a écrit :
Bonjour et merci,

Il n'y aurait pas un moyen de "ruser" pour mettre un insert into
T_AUTOINC_ATI select * from T_AUTOINC_ATI where... et que ça ne bloque pas
sur la colonne identity tout en faisant en sorte que ATI_ID soit
correctement incrémenté ?

"Fred BROUARD" wrote in message
news:
Bonjour,

contrairement à ce qui t'a été sit, il est inutile de mettre la liste de
toutes les colonnes si tu les prend toutes à l'exception de la colonne
dotée de la propriété IDENTITY.

Démo :

CREATE TABLE T_AUTOINC_ATI
(ATI_ID INT NOT NULL PRIMARY KEY IDENTITY,
ATI_DATA1 VARCHAR(16),
ATI_DATA2 VARCHAR(16))

INSERT INTO T_AUTOINC_ATI
VALUES ('abc', 'def')

SELECT *
FROM T_AUTOINC_ATI

ATI_ID ATI_DATA1 ATI_DATA2
----------- ---------------- ----------------
1 abc def

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
jerome a écrit :
Bonjour,

J'ai des duplications de données à faire par procédures et je cherche à
faire des insert into myTable select from myTable mais le problème est




que
j'ai une colonne de type indentity et que, évidemment, je ne peux




insérer la
valeur de cette colonne.
Existe-t-il un moyen de contourner ce problème sans avoir à passer
explicitement tous les noms de colonne comme paramètres de l'insert ?

Merci











--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
jerome
Merci.

"Fred BROUARD" wrote in message
news:

Non, le SELECT * est dfortement déconseillé. Il risque de ne plus
fonctionner dans certains cas....

A +

jerome a écrit :
> Bonjour et merci,
>
> Il n'y aurait pas un moyen de "ruser" pour mettre un insert into
> T_AUTOINC_ATI select * from T_AUTOINC_ATI where... et que ça ne bloque


pas
> sur la colonne identity tout en faisant en sorte que ATI_ID soit
> correctement incrémenté ?
>
> "Fred BROUARD" wrote in message
> news:
>> Bonjour,
>>
>> contrairement à ce qui t'a été sit, il est inutile de mettre la liste


de
>> toutes les colonnes si tu les prend toutes à l'exception de la colonne
>> dotée de la propriété IDENTITY.
>>
>> Démo :
>>
>> CREATE TABLE T_AUTOINC_ATI
>> (ATI_ID INT NOT NULL PRIMARY KEY IDENTITY,
>> ATI_DATA1 VARCHAR(16),
>> ATI_DATA2 VARCHAR(16))
>>
>> INSERT INTO T_AUTOINC_ATI
>> VALUES ('abc', 'def')
>>
>> SELECT *
>> FROM T_AUTOINC_ATI
>>
>> ATI_ID ATI_DATA1 ATI_DATA2
>> ----------- ---------------- ----------------
>> 1 abc def
>>
>> A +
>>
>>
>> --
>> Frédéric BROUARD, MVP SQL Server, expert bases de données et langage


SQL
>> Le site sur le langage SQL et les SGBDR :


http://sqlpro.developpez.com
>> Audit, conseil, expertise, formation, modélisation, tuning,


optimisation
>> ********************* http://www.datasapiens.com


***********************
>> jerome a écrit :
>>> Bonjour,
>>>
>>> J'ai des duplications de données à faire par procédures et je cherche


à
>>> faire des insert into myTable select from myTable mais le problème est
> que
>>> j'ai une colonne de type indentity et que, évidemment, je ne peux
> insérer la
>>> valeur de cette colonne.
>>> Existe-t-il un moyen de contourner ce problème sans avoir à passer
>>> explicitement tous les noms de colonne comme paramètres de l'insert ?
>>>
>>> Merci
>>>
>
>


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************