2017-11-18 3 views
1

이름을 바꾸려면 특정 접두사로 시작하는 모든 테이블을 반복해야합니다. 내가 시도한 코드는 아래에 있지만 두 결과 중 하나가 끝나거나 SSMS를 충돌 (가끔)하거나 각 테이블에 대해 아래에 오류 메시지가 표시됩니다. 나는 밖으로 시도해 보았습니다. dbo.개체 한정자를 사용하여 모든 테이블 반복 및 이름 바꾸기 MSSQL

누구나 내가 뭘 잘못하고 있는지 또는이 일을 더 좋은 방법을 제안 할 수 있습니까? 여기

No item by the name of 'dbo.prefix_TableName' could be found in the current database 'DatabaseName', given that @itemtype was input as '(null)'.

내가 실행 해요 코드 ... 커서 당신의 예를 들어 NVARCHAR에서
declare @oq nvarchar(max) = N'prefix_' 
declare @cmd nvarchar(max) 
select @cmd = a from (
    select 'EXEC sp_rename ''' + TABLE_NAME + ''', ''' + REPLACE(TABLE_NAME, @oq, N'') + ''' ' 
    from INFORMATION_SCHEMA.TABLES 
    for xml path('') 
) t(a) 
exec sp_executesql @cmd 

없이

SET NOCOUNT ON; 
USE [DatabaseName]; 

DECLARE @oq NVARCHAR(5), @tableName NVARCHAR(128), @newTableName NVARCHAR(128); 
SET @oq = N'prefix_'; 

/* 
    find and rename all tables 
*/ 

DECLARE [tableCursor] CURSOR FOR 
    SELECT [TABLE_NAME] FROM INFORMATION_SCHEMA.TABLES 
    WHERE [TABLE_TYPE] = 'BASE TABLE' AND [TABLE_NAME] LIKE @oq + '%' 
    ORDER BY [TABLE_NAME]; 

OPEN [tableCursor] 

FETCH NEXT FROM [tableCursor] INTO @tableName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @newTableName = REPLACE(@tableName, @oq, N''); 
    EXEC('EXEC sp_rename ''dbo.' + @tableName + ''', ''' + @newTableName + ''''); 
END 

CLOSE [tableCursor]; 
DEALLOCATE [tableCursor]; 
+2

while 루프 내에 FETCH 문 하나가 누락되었습니다. – Squirrel

+0

Thanks @Squirrel ... 그 것이 문제였습니다. 그걸 답으로 써야합니다. –

답변

0

간단한 해결책이다 (5) 절단, 당신이 아마 원인 nvarchar (7) 또는 nvarchar (max)가 필요합니다.

관련 문제