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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.