Vous avez une requête SELECT complexe, à partir de laquelle j'aimerais insérer toutes les lignes dans une variable de table, mais T-SQL ne le permet pas.
Dans le même sens, vous ne pouvez pas utiliser une variable de table avec des requêtes SELECT INTO ou INSERT EXEC. http://odetocode.com/Articles/365.aspx
Petit exemple:
declare @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
)
SELECT name, location
INTO @userData
FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30
Les données de la variable de table seront ensuite utilisées pour l'insérer / la mettre à jour dans différentes tables (principalement une copie des mêmes données avec des mises à jour mineures). Le but serait de simplement rendre le script un peu plus lisible et plus facilement personnalisable que de le faire SELECT INTO
directement dans les bonnes tables. Les performances ne sont pas un problème, car elles rowcount
sont assez petites et ne sont exécutées manuellement qu'en cas de besoin.
... ou dites-moi simplement si je fais tout mal.
la source
Le but de
SELECT INTO
est (par les documents, mon accent)Mais vous déjà avez une table cible! Donc ce que tu veux c'est
Et dans cette syntaxe, il est permis
MyTable
d'être une variable de table.la source
MyTable
ici est un espace réservé pour le nom de votre table réelle . Je ne pense pas qu'il existe de vraies bases de données avec une table nomméeMyTable
...Vous pouvez également utiliser des expressions de table communes pour stocker des jeux de données temporaires. Ils sont plus élégants et conviviaux:
la source
Vous pouvez essayer d'utiliser des tables temporaires ... si vous ne le faites pas à partir d'une application. (Il peut être correct de l'exécuter manuellement)
Vous sautez l'effort pour déclarer la table de cette façon ... Aide pour les requêtes ad hoc ... Cela crée une table temporaire locale qui ne sera pas visible pour les autres sessions à moins que vous ne soyez dans la même session. Peut-être un problème si vous exécutez une requête à partir d'une application.
si vous avez besoin de l'exécuter sur une application, utilisez des variables déclarées de cette façon:
Edit: comme beaucoup d'entre vous ont mentionné la visibilité mise à jour vers la session depuis la connexion. La création de tables temporaires n'est pas une option pour les applications Web, car les sessions peuvent être réutilisées, respectez les variables temporaires dans ces cas
la source
function
. D'après mon expérience, dans la plupart des cas où quelqu'un pense avoir besoin de telles déclarations, cela signifie en fait qu'il devrait repenser sonfunction
- ou du moins refactoriser unprocedure
. Parlant pour moi, au moins. :-)Essayez d'utiliser
INSERT
au lieu deSELECT INTO
:la source
Créez d'abord une table temporaire:
Étape 1:
** Étape 2: ** Insérez une valeur dans la table Temp.
Étape 3: Déclarez une variable de table pour contenir les données de la table temporaire.
Étape 4: sélectionnez la valeur dans la table temporaire et insérez-la dans la variable de table.
Enfin, la valeur est insérée d'une table temporaire dans la variable Table
Étape 5: Peut vérifier la valeur insérée dans la variable de table.
la source
OK, maintenant avec suffisamment d'effort, je suis capable d'insérer dans @table en utilisant ce qui suit:
L'essentiel ici est de sélectionner les colonnes à insérer.
la source
L'une des raisons d'utiliser SELECT INTO est qu'il vous permet d'utiliser IDENTITY:
Cela ne fonctionnerait pas avec une variable de table, ce qui est dommage ...
la source
IDENTITY
colonne.