Я Java-разработчик, который случайно попал в команду без администратора и не могу получить права администратора. Передо мной была поставлена задача переместить всю схему между двумя базами данных, поэтому без администратора базы данных мне пришлось делать это и делать это с помощью сценариев, поскольку я не мог использовать графический интерфейс пользователя в SQL Server 2008, поскольку у меня не было прав администратора.
Все было перенесено без проблем, однако при запуске хранимой процедуры в новой schema.table я обнаружил, что потерял поле идентификатора в таблице. Я дважды проверил скрипт, который создал таблицу, и он был там, однако, SQL Server не получил его, когда я запустил скрипт. Позже мне сказал администратор БД, что он видел эту проблему раньше.
В любом случае для SQL Server 2008 я предпринял следующие шаги, чтобы решить эту проблему, и они сработали, поэтому я публикую это здесь в надежде, что это кому-нибудь поможет. Это то, что я сделал, поскольку у меня были зависимости FK от другой таблицы, что усложняло это:
Я использовал этот запрос, чтобы убедиться, что идентичность действительно отсутствует, и просмотреть зависимости от таблицы.
1.) Найти статистику по таблице:
exec sp_help 'dbo.table_name_old';
2.) Создайте дубликат идентичной новой таблицы, за исключением того, что добавьте поле идентификатора в поле PK, где оно было раньше.
3.) Отключить удостоверение для перемещения данных.
SET IDENTITY_INSERT dbo.table_name ON
4.) Передача данных.
INSERT INTO dbo.table_name_new
(
field1, field2, etc...
)
SELECT
field1, field2, etc...
FROM
dbo.table_name_old;
5.) Убедитесь, что данные есть.
SELECT * FROM dbo.table_name_new
6.) Повторно включите личность.
SET IDENTITY_INSERT ToyRecP.ToyAwards.lkpFile_New OFF
7.) Это лучший сценарий, который я нашел, чтобы получить все отношения FK, чтобы проверить, какие таблицы исходная таблица ссылается как на зависимости, и я столкнулся со многими, так что это хранитель!
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
ORDER BY ReferenceTableName;
8.) Перед следующим шагом убедитесь, что у вас есть все сценарии PK и FK для всех задействованных таблиц.
9.) Вы можете щелкнуть правой кнопкой мыши по каждому ключу и написать скрипт, используя SQL Server 2008
10.) Удалите FK из таблицы зависимостей, используя этот синтаксис:
ALTER TABLE [dbo].[table_name] DROP CONSTRAINT [Name_of_FK]
11.) Оставьте оригинальный стол:
DROP TABLE dbo.table_name_old;
13.) Следующие шаги основаны на сценариях, которые вы создали в SQL Server 2008 на шаге 9.
- Добавить ПК к новой таблице.
- Добавить FK в новую таблицу.
- Добавить FK обратно в таблицу зависимостей.
14.) Убедитесь, что все правильно и полно. Я использовал графический интерфейс для просмотра таблиц.
15.) Переименуйте новую таблицу в исходное имя таблицы.
exec sp_RENAME '[Schema_Name.OldTableName]' , '[NewTableName]';
Наконец-то все заработало!