De FUSION, sans préciser les noms de colonne dans SQL Server 2008
J'ai été à la recherche à la MERGE
de commande qui semble cool, mais encore il nécessite des colonnes spécifiées. Je suis à la recherche de quelque chose comme:
MERGE INTO target AS t
USING source AS s
WHEN MATCHED THEN
UPDATE SET
[all t.fields = s.fields]
WHEN NOT MATCHED THEN
INSERT ([all fields])
VALUES ([all s.fields])
Est-il possible?
C'est la question que vous ne voulez pas taper les noms de colonne, ou que les tables sont en constante évolution?
Avez-vous l'essayer?
N - vous devez préciser les colonnes d'être ensemble et des valeurs qu'ils devraient être ensemble. Pas moyen de contourner cela...
Pour éviter de taper les colonnes, trouvez la table dans l'Explorateur d'Objets, développez le nom de la table, puis faites glisser le [Colonnes] dossier sur la fenêtre de requête. Cela donnera une liste séparée par des virgules de tous les noms de colonnes, tout ce que vous avez à faire est de le formater (et supprimer des colonnes que vous ne souhaitez pas spécifier).
eh bien, ne pas être paresseux, je veux juste apprendre des animaux pour rendre le développement plus facile. J'ai toujours trouver des étoffes qui est facile et bon que ce que je fais habituellement.
Avez-vous l'essayer?
N - vous devez préciser les colonnes d'être ensemble et des valeurs qu'ils devraient être ensemble. Pas moyen de contourner cela...
Pour éviter de taper les colonnes, trouvez la table dans l'Explorateur d'Objets, développez le nom de la table, puis faites glisser le [Colonnes] dossier sur la fenêtre de requête. Cela donnera une liste séparée par des virgules de tous les noms de colonnes, tout ce que vous avez à faire est de le formater (et supprimer des colonnes que vous ne souhaitez pas spécifier).
eh bien, ne pas être paresseux, je veux juste apprendre des animaux pour rendre le développement plus facile. J'ai toujours trouver des étoffes qui est facile et bon que ce que je fais habituellement.
OriginalL'auteur gangt | 2011-09-06
Vous devez vous connecter pour publier un commentaire.
Pas tout ce que vous voulez, mais partiellement:
WHEN NOT MATCHED THEN
INSERT
([all fields])
VALUES (field1, field2, ...)
(Les valeurs de la liste doit être complète, et correspondre à l'ordre des champs dans la table de définition.)
c'était une très bonne question, je suis heureux que vous posiez. En dépit de ce que les autres ont dit, "la paresse" est une vertu dans de nombreuses façons quand il s'agit de la programmation. Chaque fois que moins de frappe se traduit par moins de travail et moins d'erreurs, que nous appelons "l'augmentation de l'efficacité", pas de "paresseux". Donc, du bon travail.
Je ne suis pas sûr que dans certains cas. Il n'y a pas beaucoup de dactylographie en cause ici - il suffit de glisser la colonne de la liste à partir de l'Explorateur d'Objets. Et une liste explicite des noms de colonne dans le code empêche le débogage des cauchemars plus tard, lorsque la structure de la table changements (colonne est ajoutée, etc). On pourrait dire que l'inverse est vrai (par exemple, une colonne est supprimée), mais l'ancien est beaucoup plus commune scénario.
il n'était pas mauvais de l'OP, pour demander... j'ai tendance à partager votre opinion en général sur les avantages de l'inscription de l'colonnes, mais peu importe, c'est une critique de TSQL en général (p. ex., pourquoi il vous permet de ne pas en faire la liste, dans certains cas, et vous oblige à les énumérer dans d'autres), pas l'OP personnellement. Aussi, il y a avoir des cas où il ne serait pas de risque les problèmes que vous mentionnez, nous ne savons pas à partir du peu d'info que l'OP fourni. Le chaud ordures (HLGEM l'appel de l'OP paresseux et peu professionnel juste pour poser la question) n'est pas en aucune façon constructive.
Je suis d'accord, j'ai tout à fait en désaccord avec la généralisation que moins de taper toujours se traduit par une efficacité accrue. Oui, il y a des cas où c'est vrai, mais il ya des cas où vous êtes juste de reporter le paiement jusqu'à ce que plus tard, et plus tard peut être à 3H du matin quand un déploiement de force le système à la baisse.
OriginalL'auteur Chains
Je suis paresseux... c'est un bon proc, j'ai écrit que va cracher un général de FUSION de commande pour une table. Il interroge information_schema.colonnes pour les noms de colonne. J'ai déchiré ma base de données source nom - donc, vous devez mettre à jour les process de travail avec votre base de données (voir @SourceDB... j'ai dit que c'était pas cher.) De toute façon, je sais que d'autres pourraient écrire beaucoup mieux - il a été mon but. (Il fait quelques hypothèses que vous pourriez mettre de la logique dans la maîtriser, à savoir en tournant IDENTITY_INSERT HORS - même lorsque la table n'a pas de colonnes d'identité.) Il met à jour la table dans le contexte actuel. Il a été écrit à l'encontre de sql server 2008 pour la synchronisation des tableaux. Utilisez à vos risques et périls, bien sûr.
OriginalL'auteur Bill Gillingham
Simple alternative à la fusion sans nommage des champs ou de l'instruction de mise à jour à chaque fois que le tableau des modifications de conception. C'est uni-directionnel de la source à la cible, mais il peut être fait bi-directionnelle. N'agit que sur les enregistrements modifiés, de sorte qu'il est très rapide, même avec des serveurs liés sur connexion plus lente.
Voici le code pour l'installation de tables de test ci-dessus:
OriginalL'auteur pghcpa
Je pense que cette réponse mérite un peu plus d'amour. C'est simple, élégant et fonctionne. Toutefois, selon les tableaux en question, il peut être un peu lent, car à l'exception de la clause est de l'évaluation de chaque colonne.
Je soupçonne que vous pouvez économiser un peu de temps en rejoignant juste sur la clé primaire et la date de dernière modification (si il existe).
OriginalL'auteur user2045064