Utilisation d'une variable dans une requête

Le
Michel Romieu
Bonjour,

Le script suivant :

DECLARE @Database CHAR (50)
SET @Database = 'Optima'

USE Master
GO
ALTER DATABASE @Database SET SINGLE_USER
GO
DBCC CHECKDB(@Database, REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE @Database SET MULTI_USER
GO

génère les erreurs :

Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '@Database'.
Serveur : Msg 137, Niveau 15, État 2, Ligne 1
La variable '@Database' doit être déclarée.
Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '@Database'.

alors que :

USE Master
GO
ALTER DATABASE Optima SET SINGLE_USER
GO
DBCC CHECKDB('Optima', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE Optima SET MULTI_USER
GO

passe sans problème !

L'erreur est probablement énorme mais je ne vois pas

Si quelqu'un peut m'aider

Merci d'avance
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
bruno reiter [MVP]
Le #11719811
l'instruction GO délimite un batch, donc le groupe d'instructions qui est
envoyé au serveur.
le declare est séparé des instructions qui utilisent la variable dans ton
cas

br

"Michel Romieu" news:
Bonjour,

Le script suivant :

DECLARE @Database CHAR (50)
SET @Database = 'Optima'

USE Master
GO
ALTER DATABASE @Database SET SINGLE_USER
GO
DBCC CHECKDB(@Database, REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE @Database SET MULTI_USER
GO

génère les erreurs :

Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '@Database'.
Serveur : Msg 137, Niveau 15, État 2, Ligne 1
La variable '@Database' doit être déclarée.
Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '@Database'.

alors que :

USE Master
GO
ALTER DATABASE Optima SET SINGLE_USER
GO
DBCC CHECKDB('Optima', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE Optima SET MULTI_USER
GO

passe sans problème !

L'erreur est probablement énorme mais je ne vois pas

Si quelqu'un peut m'aider

Merci d'avance



Simon Clara
Le #11719801
Pourquoi pas

DECLARE @Database CHAR (50)
SET @Database = 'Optima'

DECLARE @Requete CHAR (500)
SET @Requete 'USE Master
GO
ALTER DATABASE '+ @Database + 'SET SINGLE_USER
GO
DBCC CHECKDB( '+ @Database + ', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE '+ @Database +' SET MULTI_USER
GO'

EXEC(@Requete)

?

Simon




"Michel Romieu" news:
Bonjour,

Le script suivant :

DECLARE @Database CHAR (50)
SET @Database = 'Optima'

USE Master
GO
ALTER DATABASE @Database SET SINGLE_USER
GO
DBCC CHECKDB(@Database, REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE @Database SET MULTI_USER
GO

génère les erreurs :

Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '@Database'.
Serveur : Msg 137, Niveau 15, État 2, Ligne 1
La variable '@Database' doit être déclarée.
Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '@Database'.

alors que :

USE Master
GO
ALTER DATABASE Optima SET SINGLE_USER
GO
DBCC CHECKDB('Optima', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE Optima SET MULTI_USER
GO

passe sans problème !

L'erreur est probablement énorme mais je ne vois pas

Si quelqu'un peut m'aider

Merci d'avance



Michel Romieu
Le #11719681
On Mon, 26 Apr 2004 08:45:54 +0200, "bruno reiter [MVP]"

l'instruction GO délimite un batch, donc le groupe d'instructions qui est
envoyé au serveur.
le declare est séparé des instructions qui utilisent la variable dans ton
cas

br


Merci beaucoup

Toutefois, il me reste une erreur aprés avoir supprimé les GO
la ligne : ALTER DATABASE @Database SET SINGLE_USER
génère l'erreur : Ligne 4 : syntaxe incorrecte vers '@Database'.

Même un USE @Database ne passe pas !


Michel Romieu


"Michel Romieu" news:
Bonjour,

Le script suivant :

DECLARE @Database CHAR (50)
SET @Database = 'Optima'

USE Master
GO
ALTER DATABASE @Database SET SINGLE_USER
GO
DBCC CHECKDB(@Database, REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE @Database SET MULTI_USER
GO

génère les erreurs :

Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '@Database'.
Serveur : Msg 137, Niveau 15, État 2, Ligne 1
La variable '@Database' doit être déclarée.
Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '@Database'.

alors que :

USE Master
GO
ALTER DATABASE Optima SET SINGLE_USER
GO
DBCC CHECKDB('Optima', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE Optima SET MULTI_USER
GO

passe sans problème !

L'erreur est probablement énorme mais je ne vois pas

Si quelqu'un peut m'aider

Merci d'avance






Poster une réponse
Anonyme