2017-10-10 48 views
0

我试着做这样的事情(更换“ - ”与“_”上INDEXNAME),但不知道如何实现正确的级联重命名指数动态

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' 

任何帮助将不胜感激。 谢谢

+0

我认为你需要动态SQL来做到这一点。 'sp_rename'不喜欢连接。 –

+0

执行proc时无法执行复制和连接。将所需的值分配给变量,然后执行'sp_rename'。 –

回答

0

这应该适合你。请注意,您将收到Caution消息。运行此脚本后,运行以下代码: Caution: Changing any part of an object name could break scripts and stored procedures.

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

这就是我要找的。 作品完美!!!!。 非常感谢(我需要在动态查询上练习) :( – Mefisto