как использовать имя из sys.Table в T- sql для повторного заполнения столбца идентификации - PullRequest
0 голосов
/ 29 февраля 2020

Это мой код для повторного заполнения всех моих таблиц

begin 
    declare @tableName nvarchar(max);
    declare c cursor for 
    select name from sys.tables;
    open c ;
    fetch next from c into  @tableName ;
    while (@@FETCH_STATUS=0)
    begin 
            DBCC CHECKIDENT  (@tableName,reseed,0); 
            print @tableName;
            fetch next from c into  @tableName ;        
    end
    close c; 
    deallocate c;
end

, поэтому ошибка

Cannot find a table or object with the name "ր翼.㻐槺.욢ै..Ճ...". Check the system catalog.

, кому я могу ее выполнить и почему я вижу эту ошибку и спасибо this the capture of screen

1 Ответ

1 голос
/ 29 февраля 2020

Используйте следующее утверждение в качестве основы - измените его, как вам нужно. В текущей реализации у нас есть PRINT, и мы генерируем команду только для таблиц, имеющих столбец идентификаторов:

DECLARE @DynamicTSQLStatement NVARCHAR(MAX);

SELECT @DynamicTSQLStatement = STUFF
(
     (
         SELECT ';' + 'DBCC CHECKIDENT  (''' + QUOTENAME(SCHEMA_NAME(T.[schema_id])) + '.' + QUOTENAME(T.[name]) + ''',reseed,0); PRINT ''' + QUOTENAME(SCHEMA_NAME(T.[schema_id])) + '.' + QUOTENAME(T.[name]) + ''''
         FROM [sys].[tables] T
         INNER JOIN [sys].[columns] C
            ON T.[object_id] = C.[object_id]
         WHERE C.[is_identity] = 1
         FOR XML PATH(''), TYPE
     ).value('.', 'NVARCHAR(MAX)')
     ,1
     ,1
     ,''
);

SELECT @DynamicTSQLStatement;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...