Поддерживает ли SQL Server какую-либо историю для отслеживания изменений таблицы, таких как добавление, удаление, переименование столбца, изменение типа и длины и т. Д.? Я обнаружил, что многие предлагают использовать хранимые процедуры для этого вручную. Но мне любопытно, поддерживает ли SQL Server такую историю в любых системных таблицах? Благодарю.SQL Server 2005 Таблица Alter History
2
A
ответ
1
Этот вид информации не сохраняется во всех СУБД по умолчанию, поскольку он может увеличить требования к хранению на порядки и может значительно снизить производительность.
Триггеры могут сделать это за вас. Триггеры не считаются ручным методом - они являются основной частью дизайна базы данных.
2
Журналы транзакций сохраняют всю эту информацию, и команда DBCC LOG должна позволить вам просмотреть это, но это недокументированная команда.
DBCC LOG(<database name>[,{0|1|2|3|4}])
0 – Basic Log Information (default)
1 – Lengthy Info
2 – Very Length Info
3 – Detailed
4 – Full Example
Синтаксис:
DBCC log (MY_DB, 4)
3
в SQL Server 2005 и выше вы можете создать триггер на уровне базы данных для отслеживания изменений в таблице. Используйте что-то вроде:
CREATE TRIGGER [YourDatabaseTrigger]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @EventData xml
DECLARE @Message varchar(1000)
SET @EventData=EVENTDATA()
INSERT INTO YourLogTable
(EventDateTime,EventDescription)
VALUES (GETDATE(),SUSER_NAME()
+'; '[email protected]('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(250)')
+'; '[email protected]('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(250)')
+'; '[email protected]('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
)
RETURN
GO
ENABLE TRIGGER [YourDatabaseTrigger] ON DATABASE
здесь некоторые просто выход из журнала:
select * from YourLogTable
EventID EventDateTime EventDescription
----------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------
1 2010-04-06 08:25:47.333 sa; TABLE; YourLogTable2; create table YourLogTable2 (EventID int primary key identity(1,1),EventDateTime datetime, EventDescription varchar(max))
2 2010-04-06 08:25:55.113 sa; TABLE; YourLogTable2; drop table YourLogTable2
(2 row(s) affected)
можно расширить журнал, чтобы содержать больше столбцов, или просто сбросить все в одном, как в этом простом примере.
Смежные вопросы
- 1. Выполняет ли таблица Alter транзакцию в sql server 2005
- 2. SQL Server 2005 - ALTER TABLE ПОСЛЕ COLUMN
- 3. SQL Server Mangement Studio Alter Script (2005)
- 4. Сводная таблица SQL Server 2005
- 5. Alter Memory Optimized SQL Server 2014 Таблица
- 6. Тонкий, но длинный SQL Server 2005 Таблица
- 7. Нулевое значение в SQL Server 2005 таблица
- 8. Материализованная таблица запросов в SQL Server 2005
- 9. SQL Server 2005 таблица слишком большая
- 10. Alter Обобщенная таблица столбцов DataType
- 11. SQL Server 2005 Alter столбец таблицы не распознается
- 12. Sql Server 2005 Pivot
- 13. Запуск инструкции alter alter alter column в SQL Server
- 14. Alter таблица ошибки MS SQL
- 15. SQL Invalid ALTER вариант Таблица
- 16. Alter столбец рассчитывается SQL SERVER
- 17. SQL Server 2005 Репликация
- 18. Триггеры SQL Server 2005
- 19. SQL Server 2005 Views
- 20. Alter план таблица запроса для SQL Server 2008
- 21. SQL Server - Microsoft SQL Server 2005
- 22. Подпроцесс SQL Server 2005
- 23. таблица добавляет обновления sql server
- 24. SQL Server Alter Computed Column
- 25. Alter SQL Server с индексами
- 26. Фрагментация индекса SQL Server 2005
- 27. Невозможно создать отношение таблицы - SQL Server 2005
- 28. SQL Server 2005 Dynamic Select
- 29. выбрать в SQL Server 2005
- 30. SQL Server 2005 Query Help
Thanks KM. Но я уже пробовал триггеры ddl, которые отлично работают и могут легко использоваться в информации о журнале, если только новые столбцы добавляются в таблицу. Но я думаю, что было бы утомительной задачей использовать команды TSQL в журнале для изменений, таких как переименование столбца с ссылками на внешние ключи или изменение длины столбца типа varchar и т. Д. И хранилище скоро станет «проблемой» как Unreason сказал. – Kayes