Table temporaire dans SQL server cause "Il y a déjà un objet nommé" erreur
J'ai le problème suivant dans SQL Server, j'ai un code qui ressemble à ceci:
DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
SELECT LAST_NAME,FRST_NAME INTO #TMPGUARDIAN FROM TBL_PEOPLE
Quand je fais ceci, j'obtiens un message d'erreur "Il y a déjà un objet nommé "#TMPGUARDIAN "dans la base de données". Quelqu'un peut me dire pourquoi j'obtiens cette erreur?
Vous devez vous connecter pour publier un commentaire.
Vous de le faire tomber, puis de le créer, puis d'essayer de le créer encore une fois en utilisant
SELECT INTO
. Changement:Dans MS SQL Server, vous pouvez créer une table sans un
CREATE TABLE
déclaration en utilisantSELECT INTO
J'ai l'habitude de mettre ces lignes au début de ma procédure stockée, puis à la fin.
C'est un "il existe" check for #temp tables.
Vous devez modifier la requête comme ceci
-- Faire une dernière session de la compensation de la toutes les tables temporaires. toujours à la baisse à la fin. Dans votre cas, parfois, il y a peut être une erreur se produire si la table n'existe pas, alors que vous essayez de supprimer.
Éviter d'utiliser les insérer dans
Parce que Si vous utilisez insérer dans puis dans le futur si vous souhaitez modifier la température de la table par l'ajout d'une nouvelle colonne qui peuvent être remplis après un processus (et non pas le long avec insert). À ce moment, vous avez besoin de retravailler et de le concevoir de la même manière.
Utiliser Une Variable De Table http://odetocode.com/articles/365.aspx
Avantages
Pas besoin de Drop, car ce sera similaire à des variables. Champ d'application se termine immédiatement après l'exécution.
Certains moments, vous pouvez faire des erreurs stupides comme la rédaction d'insérer une requête sur le même .fichier sql (dans le même espace de travail/onglet) donc, une fois que vous exécutez la requête d'insertion où votre création de requête a été écrit juste au-dessus et déjà exécuté, il sera de nouveau de lancer l'exécution avec la requête d'insertion.
C'est la raison pour laquelle nous obtenons le nom de l'objet (nom de la table) existe déjà, puisqu'il se fait exécuté pour la deuxième fois.
Alors, allez à l'onglet séparé pour écrire l'insertion ou la baisse ou que ce soit les requêtes que vous vous apprêtez à exécuter.
Ou d'utiliser les lignes de commentaire précédent à toutes les requêtes dans le même espace de travail comme
Dans Azure entrepôt de Données aussi cela se produit parfois, parce que les tables temporaires créées pour une session d'utilisateur.. j'ai eu le même problème résolu par la reconnexion de la base de données,