Utilisation d'une variable dans une condition While Exists
Bonjour,
je n'arrive pas à utiliser une variable dans une requête et je ne comprends pas où se trouve mon erreur.
Selon que j'utilise la variable @ListeDesTablesAGérer ou que je spécifie "en dur", ma liste de valeurs, cela ne fonctionne pas avec ma variable et cela fonctionne avec ma liste en dur !!
voici le code complet :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| Set NoCount ON
Declare @schemaName varchar(200)
set @schemaName=''
Declare @constraintName varchar(200)
set @constraintName=''
Declare @tableName varchar(200)
set @tableName=''
Declare @Message nvarchar(max)
Declare @Requete nvarchar(max)
Declare @ListeDesTablesAGérer nvarchar(max)
set @ListeDesTablesAGérer=''
set @ListeDesTablesAGérer=@ListeDesTablesAGérer+'''Table1'','
set @ListeDesTablesAGérer=@ListeDesTablesAGérer+'''Table2'','
set @ListeDesTablesAGérer=@ListeDesTablesAGérer+'''Table3'''
print @ListeDesTablesAGérer
While exists
(
SELECT c.name
FROM sys.objects AS c
INNER JOIN sys.tables AS t
ON c.parent_object_id = t.[object_id]
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE c.[type] IN ('D','C','F','PK','UQ','FK')
/*
Je ne comprends pas pourquoi la variable @ListeDesTablesAGérer n'est pas prise en compte !!!
*/
--and t.name in(@ListeDesTablesAGérer)
and t.name in('Table1','Table2','Table3')
and c.name > @constraintName
)
Begin
SELECT
@constraintName=min(c.name)
FROM sys.objects AS c
INNER JOIN sys.tables AS t
ON c.parent_object_id = t.[object_id]
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE c.[type] IN ('D','C','F','PK','UQ','FK')
/*
Je ne comprends pas pourquoi la variable @ListeDesTablesAGérer n'est pas prise en compte !!!
*/
-- and t.name in(@ListeDesTablesAGérer)
and t.name in('Table1','Table2','Table3')
and c.name > @constraintName
SELECT
@tableName = t.name,
@schemaName = s.name
FROM sys.objects AS c
INNER JOIN sys.tables AS t
ON c.parent_object_id = t.[object_id]
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE c.name = @constraintName
set @Message='Suppression de la contrainte ' + @constraintName + ' de la table '+ @tableName +' ...'
set @Requete= 'ALTER TABLE [' + @schemaName + N'].[' + @tableName + N'] DROP CONSTRAINT [' + @constraintName + ']'
--exec sc_Admin.ps_ExecuteRequeteSQL @Requete,@Message
print @message
print @requete
End
Set NoCount OFF |
Je tourne en rond et je ne m'en sors pas.
D'avance, merci pour vos lumières.