2017-10-10 5 views
0

Im essayant de faire quelque chose comme ça (Remplacement « - » avec « _ » sur IndexName), mais ne savent pas comment parvenir à une concaténation correcteIndex Renommer Dynamiquement

DECLARE @TestTable varchar(50) ='TableTest' 

DECLARE @TestDatabase varchar(30) ='DatabaseTest' 

DECLARE @TestIndex VARCHAR(150) ='NonClusteredIndex-20150617-075305' 

DECLARE @TestSchema VARCHAR(20) ='SChemaTest' 

EXEC sp_rename N'[' + @TestSchema + '].['[email protected]+'].['+ @TestIndex +']' 

, REPLACE(@TestIndex,'-','_') 

, N'INDEX' 

Toute aide sera appréciée. Merci

+0

Je pense que vous avez besoin de SQL dynamique pour ce faire. 'sp_rename' n'aime pas la concaténation. –

+0

Vous ne pouvez pas effectuer la réplication et la concaténation lors de l'exécution du proc. Affectez les valeurs souhaitées aux variables, puis exécutez 'sp_rename'. –

Répondre

0

Cela devrait fonctionner pour vous. Sachez que vous recevrez le message Caution. Caution: Changing any part of an object name could break scripts and stored procedures. après avoir exécuté ce script.

DECLARE @TestTable varchar(50) ='TableTest' 

DECLARE @TestDatabase varchar(30) ='DatabaseTest' 
Declare @NewTestIndex varchar(150) 
DECLARE @TestIndex VARCHAR(150) ='NonClusteredIndex-20150617-075305' 
Set @NewTestIndex = Replace(@TestIndex,'-','_') 

DECLARE @TestSchema VARCHAR(20) ='SChemaTest' 
Declare @cmd varchar(max) 
Set @cmd = 'EXEC sp_rename N''[' + @TestSchema + '].['[email protected]+'].['+ @TestIndex +']'', N''' [email protected] + ''', N''INDEX''' 

Select @cmd 

Execute (@cmd) 
+1

C'est ce que je cherche. Œuvres PARFAITES !!!!. Merci beaucoup (j'ai besoin de m'entraîner sur les querys dynamiques) :( – Mefisto