Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
Ne JAMAIS utiliser les tables systèmes dans le code SQL d'un développement. En effet ces tables sont sujettes à changement de la parte de l'éditeur. En revanche tu dispose des vues d'informations de schéma pour cela, mais aussi de proc stock et d'UDF !
MAIS...
pour te répondre : -- teste l'existance d'une table temporaire locale -- de nom #DIRECTORY pour la virer IF EXISTS (SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = 'tempdb' AND TABLE_SCHEMA = USER AND TABLE_NAME = (SELECT name FROM tempdb..sysobjects WHERE id = OBJECT_ID('tempdb..#DIRECTORY'))) DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit:
Bonjour,
Pour savoir si une table existe, je teste select * from sysobjects where type='U' and name = 'nomtable'
Mais après avoir créé une table temporaire #temp, la requête : select * from sysobjects where type='U' and name = '#temp'
ne retourne rien, en restant bien sûr dans la même connexion.
Y-a-il un autre moyen de savoir si la table temporaire existe ?
Merci de votre aide !
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Ne JAMAIS utiliser les tables systèmes dans le code SQL d'un développement. En
effet ces tables sont sujettes à changement de la parte de l'éditeur.
En revanche tu dispose des vues d'informations de schéma pour cela, mais aussi
de proc stock et d'UDF !
MAIS...
pour te répondre :
-- teste l'existance d'une table temporaire locale
-- de nom #DIRECTORY pour la virer
IF EXISTS (SELECT *
FROM tempdb.INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = 'tempdb'
AND TABLE_SCHEMA = USER
AND TABLE_NAME = (SELECT name
FROM tempdb..sysobjects
WHERE id = OBJECT_ID('tempdb..#DIRECTORY')))
DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit:
Bonjour,
Pour savoir si une table existe, je teste
select * from sysobjects where type='U' and name = 'nomtable'
Mais après avoir créé une table temporaire #temp, la requête :
select * from sysobjects where type='U' and name = '#temp'
ne retourne rien, en restant bien sûr dans la même connexion.
Y-a-il un autre moyen de savoir si la table temporaire existe ?
Merci de votre aide !
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Ne JAMAIS utiliser les tables systèmes dans le code SQL d'un développement. En effet ces tables sont sujettes à changement de la parte de l'éditeur. En revanche tu dispose des vues d'informations de schéma pour cela, mais aussi de proc stock et d'UDF !
MAIS...
pour te répondre : -- teste l'existance d'une table temporaire locale -- de nom #DIRECTORY pour la virer IF EXISTS (SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = 'tempdb' AND TABLE_SCHEMA = USER AND TABLE_NAME = (SELECT name FROM tempdb..sysobjects WHERE id = OBJECT_ID('tempdb..#DIRECTORY'))) DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit:
Bonjour,
Pour savoir si une table existe, je teste select * from sysobjects where type='U' and name = 'nomtable'
Mais après avoir créé une table temporaire #temp, la requête : select * from sysobjects where type='U' and name = '#temp'
ne retourne rien, en restant bien sûr dans la même connexion.
Y-a-il un autre moyen de savoir si la table temporaire existe ?
Merci de votre aide !
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
tintin
Je voudrais bien ne pas utiliser les tables systèmes, mais il est nécessaire, dans nombreux cas, de savoir si un objet existe.
Alors, pour mon info, est-ce que les versions récentes de SQL Server (2005) ont une clause du genre "drop table nomtable if exists", ou approchant, ainsi que cela existe depuis longtemps dans MySql ?
Peut-être n'est ce pas dans la norme SQL ANSI... mais cela me ferait marrer que cet argument soit employé par MS...
Merci de l'info.
"Fred BROUARD" a écrit :
Ne JAMAIS utiliser les tables systèmes dans le code SQL d'un développement. En effet ces tables sont sujettes à changement de la parte de l'éditeur. En revanche tu dispose des vues d'informations de schéma pour cela, mais aussi de proc stock et d'UDF !
MAIS...
pour te répondre : -- teste l'existance d'une table temporaire locale -- de nom #DIRECTORY pour la virer IF EXISTS (SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = 'tempdb' AND TABLE_SCHEMA = USER AND TABLE_NAME = (SELECT name FROM tempdb..sysobjects WHERE id = OBJECT_ID('tempdb..#DIRECTORY'))) DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit: > Bonjour, > > Pour savoir si une table existe, je teste > select * from sysobjects where type='U' and name = 'nomtable' > > Mais après avoir créé une table temporaire #temp, la requête : > select * from sysobjects where type='U' and name = '#temp' > > ne retourne rien, en restant bien sûr dans la même connexion. > > Y-a-il un autre moyen de savoir si la table temporaire existe ? > > Merci de votre aide ! > >
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Je voudrais bien ne pas utiliser les tables systèmes, mais il est nécessaire,
dans nombreux cas, de savoir si un objet existe.
Alors, pour mon info, est-ce que les versions récentes de SQL Server (2005)
ont une clause du genre "drop table nomtable if exists", ou approchant,
ainsi que cela existe depuis longtemps dans MySql ?
Peut-être n'est ce pas dans la norme SQL ANSI... mais cela me ferait marrer
que cet argument soit employé par MS...
Merci de l'info.
"Fred BROUARD" a écrit :
Ne JAMAIS utiliser les tables systèmes dans le code SQL d'un développement. En
effet ces tables sont sujettes à changement de la parte de l'éditeur.
En revanche tu dispose des vues d'informations de schéma pour cela, mais aussi
de proc stock et d'UDF !
MAIS...
pour te répondre :
-- teste l'existance d'une table temporaire locale
-- de nom #DIRECTORY pour la virer
IF EXISTS (SELECT *
FROM tempdb.INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = 'tempdb'
AND TABLE_SCHEMA = USER
AND TABLE_NAME = (SELECT name
FROM tempdb..sysobjects
WHERE id = OBJECT_ID('tempdb..#DIRECTORY')))
DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit:
> Bonjour,
>
> Pour savoir si une table existe, je teste
> select * from sysobjects where type='U' and name = 'nomtable'
>
> Mais après avoir créé une table temporaire #temp, la requête :
> select * from sysobjects where type='U' and name = '#temp'
>
> ne retourne rien, en restant bien sûr dans la même connexion.
>
> Y-a-il un autre moyen de savoir si la table temporaire existe ?
>
> Merci de votre aide !
>
>
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Je voudrais bien ne pas utiliser les tables systèmes, mais il est nécessaire, dans nombreux cas, de savoir si un objet existe.
Alors, pour mon info, est-ce que les versions récentes de SQL Server (2005) ont une clause du genre "drop table nomtable if exists", ou approchant, ainsi que cela existe depuis longtemps dans MySql ?
Peut-être n'est ce pas dans la norme SQL ANSI... mais cela me ferait marrer que cet argument soit employé par MS...
Merci de l'info.
"Fred BROUARD" a écrit :
Ne JAMAIS utiliser les tables systèmes dans le code SQL d'un développement. En effet ces tables sont sujettes à changement de la parte de l'éditeur. En revanche tu dispose des vues d'informations de schéma pour cela, mais aussi de proc stock et d'UDF !
MAIS...
pour te répondre : -- teste l'existance d'une table temporaire locale -- de nom #DIRECTORY pour la virer IF EXISTS (SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = 'tempdb' AND TABLE_SCHEMA = USER AND TABLE_NAME = (SELECT name FROM tempdb..sysobjects WHERE id = OBJECT_ID('tempdb..#DIRECTORY'))) DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit: > Bonjour, > > Pour savoir si une table existe, je teste > select * from sysobjects where type='U' and name = 'nomtable' > > Mais après avoir créé une table temporaire #temp, la requête : > select * from sysobjects where type='U' and name = '#temp' > > ne retourne rien, en restant bien sûr dans la même connexion. > > Y-a-il un autre moyen de savoir si la table temporaire existe ? > > Merci de votre aide ! > >
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
tintin
Le problème est que si je fais, pour simplifier :
create table #DIRECTORY ( test int ) SELECT name FROM sysobjects WHERE id = OBJECT_ID('#DIRECTORY')
la seconde instruction ne me retourne rien.
A fortiori, bien sûr, la requête complète que tu suggères ne marchera pas.
Par contre cela marche bien avec une table permanente (sans #).
Que se passe-t-il ?
Merci de ton aide.
"Fred BROUARD" a écrit :
-- teste l'existance d'une table temporaire locale -- de nom #DIRECTORY pour la virer IF EXISTS (SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = 'tempdb' AND TABLE_SCHEMA = USER AND TABLE_NAME = (SELECT name FROM tempdb..sysobjects WHERE id = OBJECT_ID('tempdb..#DIRECTORY'))) DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit: > Bonjour, > > Pour savoir si une table existe, je teste > select * from sysobjects where type='U' and name = 'nomtable' > > Mais après avoir créé une table temporaire #temp, la requête : > select * from sysobjects where type='U' and name = '#temp' > > ne retourne rien, en restant bien sûr dans la même connexion. > > Y-a-il un autre moyen de savoir si la table temporaire existe ? > > Merci de votre aide ! > >
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Le problème est que si je fais, pour simplifier :
create table #DIRECTORY ( test int )
SELECT name FROM sysobjects WHERE id = OBJECT_ID('#DIRECTORY')
la seconde instruction ne me retourne rien.
A fortiori, bien sûr, la requête complète que tu suggères ne marchera pas.
Par contre cela marche bien avec une table permanente (sans #).
Que se passe-t-il ?
Merci de ton aide.
"Fred BROUARD" a écrit :
-- teste l'existance d'une table temporaire locale
-- de nom #DIRECTORY pour la virer
IF EXISTS (SELECT *
FROM tempdb.INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = 'tempdb'
AND TABLE_SCHEMA = USER
AND TABLE_NAME = (SELECT name
FROM tempdb..sysobjects
WHERE id = OBJECT_ID('tempdb..#DIRECTORY')))
DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit:
> Bonjour,
>
> Pour savoir si une table existe, je teste
> select * from sysobjects where type='U' and name = 'nomtable'
>
> Mais après avoir créé une table temporaire #temp, la requête :
> select * from sysobjects where type='U' and name = '#temp'
>
> ne retourne rien, en restant bien sûr dans la même connexion.
>
> Y-a-il un autre moyen de savoir si la table temporaire existe ?
>
> Merci de votre aide !
>
>
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
create table #DIRECTORY ( test int ) SELECT name FROM sysobjects WHERE id = OBJECT_ID('#DIRECTORY')
la seconde instruction ne me retourne rien.
A fortiori, bien sûr, la requête complète que tu suggères ne marchera pas.
Par contre cela marche bien avec une table permanente (sans #).
Que se passe-t-il ?
Merci de ton aide.
"Fred BROUARD" a écrit :
-- teste l'existance d'une table temporaire locale -- de nom #DIRECTORY pour la virer IF EXISTS (SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = 'tempdb' AND TABLE_SCHEMA = USER AND TABLE_NAME = (SELECT name FROM tempdb..sysobjects WHERE id = OBJECT_ID('tempdb..#DIRECTORY'))) DROP TABLE #DIRECTORY
C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
A +
tintin a écrit: > Bonjour, > > Pour savoir si une table existe, je teste > select * from sysobjects where type='U' and name = 'nomtable' > > Mais après avoir créé une table temporaire #temp, la requête : > select * from sysobjects where type='U' and name = '#temp' > > ne retourne rien, en restant bien sûr dans la même connexion. > > Y-a-il un autre moyen de savoir si la table temporaire existe ? > > Merci de votre aide ! > >
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
bruno reiter [MVP]
create table #t1(c1 int null)
if (object_id(N'tempdb..#t1') is not null) begin print 'exists and dropped #t1' drop table #t1 end else begin print 'does not exists' end
attention, il pourrait exister une PROC #t1
br
"tintin" wrote in message news:
Bonjour,
Pour savoir si une table existe, je teste select * from sysobjects where type='U' and name = 'nomtable'
Mais après avoir créé une table temporaire #temp, la requête : select * from sysobjects where type='U' and name = '#temp'
ne retourne rien, en restant bien sûr dans la même connexion.
Y-a-il un autre moyen de savoir si la table temporaire existe ?
Merci de votre aide !
create table #t1(c1 int null)
if (object_id(N'tempdb..#t1') is not null)
begin
print 'exists and dropped #t1'
drop table #t1
end
else
begin
print 'does not exists'
end
attention, il pourrait exister une PROC #t1
br
"tintin" <tintin@discussions.microsoft.com> wrote in message
news:3CF4BDB7-C21A-41A4-AB2B-7AC5BAA5CDA0@microsoft.com...
Bonjour,
Pour savoir si une table existe, je teste
select * from sysobjects where type='U' and name = 'nomtable'
Mais après avoir créé une table temporaire #temp, la requête :
select * from sysobjects where type='U' and name = '#temp'
ne retourne rien, en restant bien sûr dans la même connexion.
Y-a-il un autre moyen de savoir si la table temporaire existe ?
if (object_id(N'tempdb..#t1') is not null) begin print 'exists and dropped #t1' drop table #t1 end else begin print 'does not exists' end
attention, il pourrait exister une PROC #t1
br
"tintin" wrote in message news:
Bonjour,
Pour savoir si une table existe, je teste select * from sysobjects where type='U' and name = 'nomtable'
Mais après avoir créé une table temporaire #temp, la requête : select * from sysobjects where type='U' and name = '#temp'
ne retourne rien, en restant bien sûr dans la même connexion.
Y-a-il un autre moyen de savoir si la table temporaire existe ?
Merci de votre aide !
tintin
Désolé je n'avais pas compris l'usage de tempdb, et croyais que c'était ta base de tests. Donc tout va bien.
"tintin" a écrit :
Le problème est que si je fais, pour simplifier :
create table #DIRECTORY ( test int ) SELECT name FROM sysobjects WHERE id = OBJECT_ID('#DIRECTORY')
la seconde instruction ne me retourne rien.
A fortiori, bien sûr, la requête complète que tu suggères ne marchera pas.
Par contre cela marche bien avec une table permanente (sans #).
Que se passe-t-il ?
Merci de ton aide.
"Fred BROUARD" a écrit :
> -- teste l'existance d'une table temporaire locale > -- de nom #DIRECTORY pour la virer > IF EXISTS (SELECT * > FROM tempdb.INFORMATION_SCHEMA.TABLES > WHERE TABLE_CATALOG = 'tempdb' > AND TABLE_SCHEMA = USER > AND TABLE_NAME = (SELECT name > FROM tempdb..sysobjects > WHERE id = OBJECT_ID('tempdb..#DIRECTORY'))) > DROP TABLE #DIRECTORY > > C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!! > > A + > > tintin a écrit: > > Bonjour, > > > > Pour savoir si une table existe, je teste > > select * from sysobjects where type='U' and name = 'nomtable' > > > > Mais après avoir créé une table temporaire #temp, la requête : > > select * from sysobjects where type='U' and name = '#temp' > > > > ne retourne rien, en restant bien sûr dans la même connexion. > > > > Y-a-il un autre moyen de savoir si la table temporaire existe ? > > > > Merci de votre aide ! > > > > > > -- > Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL > Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com > Audit, conseil, expertise, formation, modélisation, tuning, optimisation > ********************* http://www.datasapiens.com *********************** > >
Désolé je n'avais pas compris l'usage de tempdb, et croyais que c'était ta
base de tests. Donc tout va bien.
"tintin" a écrit :
Le problème est que si je fais, pour simplifier :
create table #DIRECTORY ( test int )
SELECT name FROM sysobjects WHERE id = OBJECT_ID('#DIRECTORY')
la seconde instruction ne me retourne rien.
A fortiori, bien sûr, la requête complète que tu suggères ne marchera pas.
Par contre cela marche bien avec une table permanente (sans #).
Que se passe-t-il ?
Merci de ton aide.
"Fred BROUARD" a écrit :
> -- teste l'existance d'une table temporaire locale
> -- de nom #DIRECTORY pour la virer
> IF EXISTS (SELECT *
> FROM tempdb.INFORMATION_SCHEMA.TABLES
> WHERE TABLE_CATALOG = 'tempdb'
> AND TABLE_SCHEMA = USER
> AND TABLE_NAME = (SELECT name
> FROM tempdb..sysobjects
> WHERE id = OBJECT_ID('tempdb..#DIRECTORY')))
> DROP TABLE #DIRECTORY
>
> C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!!
>
> A +
>
> tintin a écrit:
> > Bonjour,
> >
> > Pour savoir si une table existe, je teste
> > select * from sysobjects where type='U' and name = 'nomtable'
> >
> > Mais après avoir créé une table temporaire #temp, la requête :
> > select * from sysobjects where type='U' and name = '#temp'
> >
> > ne retourne rien, en restant bien sûr dans la même connexion.
> >
> > Y-a-il un autre moyen de savoir si la table temporaire existe ?
> >
> > Merci de votre aide !
> >
> >
>
> --
> Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
> Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
> Audit, conseil, expertise, formation, modélisation, tuning, optimisation
> ********************* http://www.datasapiens.com ***********************
>
>
Désolé je n'avais pas compris l'usage de tempdb, et croyais que c'était ta base de tests. Donc tout va bien.
"tintin" a écrit :
Le problème est que si je fais, pour simplifier :
create table #DIRECTORY ( test int ) SELECT name FROM sysobjects WHERE id = OBJECT_ID('#DIRECTORY')
la seconde instruction ne me retourne rien.
A fortiori, bien sûr, la requête complète que tu suggères ne marchera pas.
Par contre cela marche bien avec une table permanente (sans #).
Que se passe-t-il ?
Merci de ton aide.
"Fred BROUARD" a écrit :
> -- teste l'existance d'une table temporaire locale > -- de nom #DIRECTORY pour la virer > IF EXISTS (SELECT * > FROM tempdb.INFORMATION_SCHEMA.TABLES > WHERE TABLE_CATALOG = 'tempdb' > AND TABLE_SCHEMA = USER > AND TABLE_NAME = (SELECT name > FROM tempdb..sysobjects > WHERE id = OBJECT_ID('tempdb..#DIRECTORY'))) > DROP TABLE #DIRECTORY > > C'est le seul cas ou il faut passer par l'intermédiaire d'une table système !!! > > A + > > tintin a écrit: > > Bonjour, > > > > Pour savoir si une table existe, je teste > > select * from sysobjects where type='U' and name = 'nomtable' > > > > Mais après avoir créé une table temporaire #temp, la requête : > > select * from sysobjects where type='U' and name = '#temp' > > > > ne retourne rien, en restant bien sûr dans la même connexion. > > > > Y-a-il un autre moyen de savoir si la table temporaire existe ? > > > > Merci de votre aide ! > > > > > > -- > Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL > Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com > Audit, conseil, expertise, formation, modélisation, tuning, optimisation > ********************* http://www.datasapiens.com *********************** > >