Comment puis-je conditionnellement créer une table dans Sybase (TSQL)?
OK, donc Sybase (12.5.4) me permettra de faire ce qui suit pour supprimer une table si elle existe déjà:
IF EXISTS (
SELECT 1
FROM sysobjects
WHERE name = 'a_table'
AND type = 'U'
)
DROP TABLE a_table
GO
Mais si j'essaie de faire la même chose avec la création de la table, j'ai toujours averti que la table existe déjà, parce qu'il est allé de l'avant et a essayé de créer ma table et ignoré l'instruction conditionnelle. Juste essayez d'exécuter l'instruction suivante deux fois, vous verrez ce que je veux dire:
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE name = 'a_table'
AND type = 'U'
)
CREATE TABLE a_table (
col1 int not null,
col2 int null
)
GO
L'exécution de la ci-dessus génère l'erreur suivante:
Des Erreurs de SQL Server (localhost)
Erreur:2714 à la Ligne:7 Message:Il y a
déjà un objet nommé "a_table" dans
la base de données.
Quel est le problème avec ça?!
Qu'est-ce downvoting réponses? Et puis attribuez-vous l'acceptation? Pour un non-réponse?
J'ai downvoted des réponses qui ne sont pas aider à répondre à la question, c'est le but de downvoting. J'ai upvoted réponses qui ont aidé et ont été viable, mais à la fin la seule solution qui a fonctionné pour moi, c'était mon propre. Je n'ai pas rep pour répondre à ma propre question, il n'est donc pas à mon avantage.
Juste assez. Je vais vous rappeler de ne pas répondre si je suis certaine que votre question est traitée par ma réponse. Dans ce cas, il n'y avait pas suffisamment d'informations pour savoir, si je perdais mon temps.
OK, je peux voir d'où vous venez, vous avez investi beaucoup de temps à essayer de résoudre ma question, je dois vous remercier pour ne pas vous pénaliser. Tandis que les autres downvoted réponses étaient tout simplement incorrect, la vôtre était plus considéré comme - j'avoue que j'ai été trop vite en besogne dans downvoting. Toutes mes excuses, j'ai révoqué le -1.
J'ai downvoted des réponses qui ne sont pas aider à répondre à la question, c'est le but de downvoting. J'ai upvoted réponses qui ont aidé et ont été viable, mais à la fin la seule solution qui a fonctionné pour moi, c'était mon propre. Je n'ai pas rep pour répondre à ma propre question, il n'est donc pas à mon avantage.
Juste assez. Je vais vous rappeler de ne pas répondre si je suis certaine que votre question est traitée par ma réponse. Dans ce cas, il n'y avait pas suffisamment d'informations pour savoir, si je perdais mon temps.
OK, je peux voir d'où vous venez, vous avez investi beaucoup de temps à essayer de résoudre ma question, je dois vous remercier pour ne pas vous pénaliser. Tandis que les autres downvoted réponses étaient tout simplement incorrect, la vôtre était plus considéré comme - j'avoue que j'ai été trop vite en besogne dans downvoting. Toutes mes excuses, j'ai révoqué le -1.
OriginalL'auteur ninesided | 2008-11-21
Vous devez vous connecter pour publier un commentaire.
La seule solution que j'ai trouvé jusqu'à présent est d'utiliser exécution immédiate:
fonctionne comme un charme, se sent comme un sale hack.
Convenu.. Juste voulu inclure un lien vers les docs infocenter.sybase.com/help/index.jsp?topic=/...
Pour info, Vous pouvez avoir à mettre de l'exécution de la commande entre guillemets simples plutôt que des guillemets doubles.
OriginalL'auteur ninesided
Il n'y a pas d'autre moyen que de faire appel
create table
dansexecute("create table ...")
SYBASE Manuel dit:
OriginalL'auteur Vinay
Je n'ai pas testé, mais vous pouvez essayer de déplacer l'instruction create table dans une procédure stockée. Vous pouvez alors conditionnellement appel de la procédure stockée en fonction de votre existant si l'instruction.
OriginalL'auteur AdamH
Attribuer le "CREATE TABLE" déclaration dans un char @variable et ensuite faire un EXEC(@variable).
OriginalL'auteur B0rG
Si vous voulez toujours de créer la table, mais de façon conditionnelle, vous pouvez utiliser:
OriginalL'auteur Mark Rhodes
Il n'existe aucune solution de rechange nécessaires 😉
Selon la documentation:
Suffit d'utiliser le SI n'EXISTE PAS.
La syntaxe j'ai copié est de mon mode hors connexion Sybase Anywhere 12 de la Documentation et de syntaxe il y travaille. Ok, na pas voir l'ASE tag 😉
OriginalL'auteur Diego Frehner
OriginalL'auteur Eugene Yokota
Cela fonctionne lorsqu'il est testé avec Sybase n'importe où 10.01 :
OriginalL'auteur Peter Cichoszewski
Essayez d'utiliser de début et de Fin.
SI N'EXISTE PAS (
SELECT Count(1)
DE sysobjects
Where name = 'a_table'
ET type = 'U'
)
COMMENCER
CRÉER une TABLE a_table (
col1 int not null,
col2 int null
)
FIN
ALLER
OriginalL'auteur SquidScareMe