J'essaie de sélectionner certains champs d'une table et de les insérer dans une table existante à partir d'une procédure stockée. Voici ce que j'essaye:
SELECT col1, col2
INTO dbo.TableTwo
FROM dbo.TableOne
WHERE col3 LIKE @search_key
Je pense que SELECT ... INTO ...
c'est pour les tables temporaires, c'est pourquoi j'obtiens une erreur qui dbo.TableTwo
existe déjà.
Comment puis-je insérer plusieurs lignes de dbo.TableOne
dans dbo.TableTwo
?
sql
sql-server
tsql
stored-procedures
Daniel
la source
la source
Réponses:
SELECT ... INTO ...
ne fonctionne que si la table spécifiée dans la clause INTO n'existe pas - sinon, vous devez utiliser:Cela suppose qu'il n'y a que deux colonnes dans dbo.TABLETWO - vous devez spécifier les colonnes sinon:
la source
SELECT... INTO...
instruction ne semble pas fonctionner si la table spécifiée dans laINTO
clause n'existe pas déjà. J'obtiens une erreur "variable non déclarée". Bien que ce problème ne concerne peut-être que MySQL. LeCREATE TABLE ... LIKE .. worked
;Il existe deux façons différentes d'implémenter l'insertion de données d'une table dans une autre table.
Pour une table existante - INSERT INTO SELECT
Cette méthode est utilisée lorsque la table est déjà créée dans la base de données plus tôt et que les données doivent être insérées dans cette table à partir d'une autre table. Si les colonnes répertoriées dans la clause insert et la clause select sont identiques, elles ne sont pas tenues de les répertorier. Il est recommandé de toujours les répertorier à des fins de lisibilité et d'évolutivité.
Pour les tables inexistantes - SELECT INTO
Cette méthode est utilisée lorsque la table n'est pas créée plus tôt et doit être créée lorsque des données d'une table doivent être insérées dans la table nouvellement créée à partir d'une autre table. La nouvelle table est créée avec les mêmes types de données que les colonnes sélectionnées.
Réf 1 2
la source
Cela fonctionnerait comme indiqué ci-dessous:
la source
SELECT *
ne marchera pas. C'est une meilleure façon, merci!Si vous avez
select * into tablename from other tablenames
déjà utilisé , la prochaine fois, pour ajouter, vous ditesselect * into existing table tablename from other tablenames
la source
Si la table de destination existe mais que vous ne souhaitez pas spécifier de noms de colonne:
la source