sql-server - vérifier - tester si une table existe sql server
Vérifiez si la table existe dans SQL Server (14)
IF OBJECT_ID (N'dbo.T', N'U') IS NOT NULL BEGIN print 'deleted table'; drop table t END else begin print 'table not found' end Create table t (id int identity(1,1) not null, name varchar(30) not null, lastname varchar(25) null) insert into t( name, lastname) values('john','doe'); insert into t( name, lastname) values('rose',NULL); Select * from t 1 john doe 2 rose NULL -- clean drop table t
Je voudrais que ce soit la discussion ultime sur la façon de vérifier si une table existe dans SQL Server 2000/2005 en utilisant SQL Statement.
Lorsque vous répondez à Google, vous obtenez tellement de réponses différentes. Existe-t-il un moyen officiel / rétrograde et avancé de le faire?
Voici deux façons possibles de le faire. Lequel parmi les deux est la norme / meilleure façon de le faire?
Première façon:
IF EXISTS (SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME='mytablename')
SELECT 1 AS res ELSE SELECT 0 AS res;
Deuxième façon:
IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL
SELECT 1 AS res ELSE SELECT 0 AS res;
MySQL fournit le simple SHOW TABLES LIKE '% tablename%' ; déclaration. Je cherche quelque chose de similaire.
- - créer une procédure pour vérifier si une table existe
DELIMITER $$
DROP PROCEDURE IF EXISTS `checkIfTableExists`;
CREATE PROCEDURE checkIfTableExists(
IN databaseName CHAR(255),
IN tableName CHAR(255),
OUT boolExistsOrNot CHAR(40)
)
BEGIN
SELECT count(*) INTO boolExistsOrNot FROM information_schema.TABLES
WHERE (TABLE_SCHEMA = databaseName)
AND (TABLE_NAME = tableName);
END $$
DELIMITER ;
- - comment utiliser: vérifier si les migrations de tables existent
CALL checkIfTableExists('muDbName', 'migrations', @output);
Je sais que c'est une vieille question mais j'ai trouvé cette possibilité si vous prévoyez de l'appeler souvent.
create procedure Table_Exists
@tbl varchar(50)
as
return (select count(*) from sysobjects where type = 'U' and name = @tbl)
go
Je voulais juste mentionner une situation où il serait probablement un peu plus facile d'utiliser la méthode OBJECT_ID
. Les vues INFORMATION_SCHEMA
sont des objets sous chaque base de données
Les vues de schéma d'informations sont définies dans un schéma spécial nommé INFORMATION_SCHEMA. Ce schéma est contenu dans chaque base de données.
https://msdn.microsoft.com/en-us/library/ms186778.aspx
Par conséquent, toutes les tables auxquelles vous accédez en utilisant
IF EXISTS (SELECT 1
FROM [database].INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME='mytablename')
SELECT 1 AS res ELSE SELECT 0 AS res;
ne reflétera que ce qui se trouve dans [database]
. Si vous voulez vérifier si les tables d' une autre base de données existent, sans changer dynamiquement la [database]
chaque fois, OBJECT_ID
vous permettra de le faire dès la sortie de la boîte. Ex-
IF OBJECT_ID (N'db1.schema.table1', N'U') IS NOT NULL
SELECT 1 AS res ELSE SELECT 0 AS res;
fonctionne aussi bien que
IF OBJECT_ID (N'db2.schema.table1', N'U') IS NOT NULL
SELECT 1 AS res ELSE SELECT 0 AS res;
SQL SERVER 2016 Modifier :
À compter de 2016, Microsoft a simplifié la possibilité de rechercher des objets inexistants avant de les supprimer, en ajoutant les mots-clés if exists
pour drop
instructions. Par exemple,
drop table if exists mytablename
fera la même chose que les wrappers OBJECT_ID
/ INFORMATION_SCHEMA
, dans 1 ligne de code.
L'utilisation du schéma d'informations est la manière standard de le faire, il devrait donc être utilisé par toutes les bases de données qui le supportent.
Notez également que si pour une raison quelconque vous devez vérifier une table temporaire, vous pouvez le faire:
if OBJECT_ID('tempdb..#test') is not null
--- temp table exists
Pour les requêtes de ce type, il est toujours préférable d'utiliser une vue INFORMATION_SCHEMA
. Ces vues sont (la plupart du temps) standard dans de nombreuses bases de données différentes et changent rarement de version en version.
Pour vérifier si une table existe, utilisez:
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'TheSchema'
AND TABLE_NAME = 'TheTable'))
BEGIN
--Do Stuff
END
Quelque chose d'important à savoir pour tous ceux qui n'ont pas encore trouvé leur solution: Serveur SQL! = MYSQL . Si vous voulez le faire avec MYSQL , c'est assez simple
$sql = "SELECT 1 FROM `db_name`.`table_name` LIMIT 1;";
$result = mysql_query($sql);
if( $result == false )
echo "table DOES NOT EXIST";
else
echo "table exists";
Posté ici parce que c'est le meilleur hit de Google.
Si cela doit être la discussion 'ultime', alors il faut noter que le script de Larry Leonard peut également interroger un serveur distant si les serveurs sont liés.
if exists (select * from REMOTE_SERVER.MyOtherDatabase.sys.tables where name = 'MyTable')
print 'Exists'
Si quelqu'un essaie de faire la même chose dans linq to sql (ou particulièrement linqpad), activez l'option pour inclure les tables et les vues système et faites ce code:
let oSchema = sys.Schemas.FirstOrDefault(s=>s.Name==a.schema )
where oSchema !=null
let o=oSchema!=null?sys.Objects.FirstOrDefault (o => o.Name==a.item && o.Schema_id==oSchema.Schema_id):null
where o!=null
étant donné que vous avez un objet avec le nom dans une propriété appelée élément, et le schéma dans une propriété appelée schéma où le nom de la variable source est a
Vous cherchez un tableau sur une base de données différente:
if exists (select * from MyOtherDatabase.sys.tables where name = 'MyTable')
print 'Exists'
considère dans une base de données que vous avez une table t1. vous voulez exécuter un script sur une autre base de données - si t1 existe alors ne faites rien d'autre créer t1. Pour ce faire, ouvrez un studio visuel et procédez comme suit:
Cliquez avec le bouton droit sur t1, puis cliquez sur Table de script sous, puis sur DROP et Créer sur, puis sur Nouvel éditeur de requête.
vous trouverez votre requête souhaitée. Mais avant d'exécuter ce script, n'oubliez pas de commenter l'instruction drop dans la requête car vous ne voulez pas en créer une nouvelle s'il en existe déjà une.
Merci
IF EXISTS
(
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'PutSchemaHere'
AND
TABLE_NAME = 'PutTableNameHere'
)
IF OBJECT_ID('mytablename') IS NOT NULL