Может кто знает, что можно придумать?Сначала объяснить, что не получается (текст хотя бы одной ошибки подойдёт — текст, а не ваше представление о нём). Указать, что вы понимаете под MS SQL — хотя бы намек (версия, редакция). И самое главное "подключение" — это типа подключения MS Word к ис-про.doc.
Шринк не работает.
BACKUP LOG [General] WITH NO_LOG
GO
--
DBCC SHRINKDATABASE ([General])
GO
Хочу развернуть бэкап на другом сервере 2016 EXPRESS, шринкнуть там забэкапить и развернуть на 2005.У MS SQL нет обратной совместимости версий.
Тогда ищу другие варианты...Помогу.
Подключите сам файл БД (mdf), без журнала (FOR ATTACH_REBUILD_LOG)
CREATE TRIGGER PersonDelete ON [Person] FOR DELETE AS
BEGIN
SET NOCOUNT ON
-- [dbo].[Variant]
DELETE FROM Variant WHERE (Variant.Kind = 'P') AND (Variant.[Object] IN ( SELECT ID FROM deleted))
-- [dbo].[Internet]
DELETE FROM Internet WHERE (Internet.Kind = 'P') AND (Internet.[Object] IN ( SELECT ID FROM deleted))
END
--
GO
CREATE TRIGGER AttributeValueUpdateDelete ON FilmAttributeValue FOR UPDATE, DELETE AS
BEGIN
SET NOCOUNT ON
UPDATE FilmAttributeGroup
SET Uses = (SELECT COUNT(*) FROM FilmAttributeValue WHERE ([Group] = deleted.[Group]))
FROM FilmAttributeGroup
INNER JOIN deleted ON FilmAttributeGroup.ID = deleted.[Group]
END
--
GO
Что такое UC_Person в данном примере SQL UNIQUE Constraint?Пара ID, LastName уникальна.
...
[ID] [int] IDENTITY(1,1) NOT NULL
...
CONSTRAINT [PK_Persons] PRIMARY KEY CLUSTERED ( [ID] ASC )
...
...
[BirthDay] [datetime] NULL,
[DeathDay] [datetime] NULL,
[Age] [int] NULL AS DATEDIFF( Year, BirthDay, ISNULL( DeathDay, GETDATE()))
+ ( SIGN ( DATEDIFF ( DAY, BirthDay, DATEADD ( YEAR, YEAR( BirthDay )
- YEAR( ISNULL( DeathDay, GETDATE()) ), ISNULL( DeathDay, GETDATE())))) - 1 ) / 2
...
Что лучше триггер или процедура?В процедуру не передаются таблицы inserted и deleted, они требуют явного вызова. А в триггерах запрещены некоторые операции.
И почему не запихнуть бы всю логику в процедуры?Можно, некоторые так и делают: проще поддерживать (DBA никакого отношения к программированию процедур не имеет — администратор); в общем случае, процедуры лучше кэшируются и пр.
Как решить данную проблему?Для UniCode-строк нужно использовать тип nvarchar и пр., начинающиеся с n. Либо использовать кодировку ISO. Типы данных (Transact-SQL)
Если не отходить от такого способа, нужно как-то скормить SQL Server-у имя таблицы, сгененированное автоматически.EXECUTE
Это возможно?