Je dois vérifier si une table existe dans SQL ou non.
Sinon, il doit en créer un automatiquement.
Maintenant, j'ai recherché et trouvé ce codage:
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[YourTable]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[YourTable](
....
....
....
)
END
Quelqu'un peut-il expliquer pourquoi il est écrit où object_id = OBJECT_ID
et que dois-je mettre à sa place?
J'aime cette syntaxe:
if(object_id(N'[dbo].[YourTable]', 'U') is not null)
...
Où object_id prend le type d'objet à 2 caractères comme second paramètre. Vous pouvez trouver la liste des types d'objets listés ci-dessous dans la documentation sys.objects :
La méthode ISO SQL pour vérifier l'existence d'un objet de niveau table est la vue INFORMATION_SCHEMA.TABLES.
Il n'y a rien mal avec sys.objects mais .... INFORMATION_SCHEMA.TABLES est un peu plus déclaratif - et c'est multi-plateforme (ce qui souvent n'a pas d'importance, mais peut-être toujours Nice.)
Je pense que cela est probablement plus lisible pour un nouveau codeur:
DECLARE @tableName SYSNAME = 'tbfoo'
DECLARE @schemaNAme SYSNAME = 'fooSchema'
IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @tableName AND TABLE_SCHEMA = @schemaName )
BEGIN
RAISERROR('%s exists in schema: %s', 0, 1, @tableName, @schemaName)
END
ELSE
BEGIN
RAISERROR('%s DOES NOT EXIST in schema: %s', 0, 1, @tableName, @schemaName)
END
Ne vous inquiétez pas pour la commande RAISERROR, c’est une façon agréable d’imprimer des messages formatés.
Vous pouvez interroger la vue INFORMATION_SCHEMA pour avoir une idée de son contenu.
SELECT TOP 5 * FROM INFORMATION_SCHEMA.TABLES
Comme vous pouvez le constater, vous pouvez référencer les schémas et les catalogues par leur nom plutôt que de rechercher leur ID avec OBJECT_ID ().
object_id = OBJECT_ID(N'[dbo].[YourTable]')
object_id
est le nom de la colonne dans sys.objects
OBJECT_ID
est une fonction qui retourne la ID
pour l'objet que vous spécifiez, c'est-à-dire YourTable
.
Vous comparez l'ID d'objet de YourTable
avec la colonne object_id
de la table sys.objects
. Vous devez remplacer YourTable
par le nom de la table que vous souhaitez vérifier existe déjà.
OBJECT_ID()
est une fonction qui renvoie l'ID d'objet. Voir la documentation:
Renvoie le numéro d'identification de l'objet de base de données d'un objet à portée de schéma objet.
http://msdn.Microsoft.com/en-us/library/ms190328.aspx
En lui transmettant certains paramètres (par exemple, les détails de votre table), il retournera un ID. Vous pouvez ensuite comparer cela aux ID de la table sys.objects
pour vérifier s’il existe déjà.