powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сделать исключение для одной таблице и для БД
6 сообщений из 6, страница 1 из 1
Как сделать исключение для одной таблице и для БД
    #40058051
субарбан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна помощь с триггером. Добавить в исключения таблицу. В исключениях сейчас хранятся БД.

Это таблица с исключениями для БД
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE [dbo].[trace](
    [text] [nvarchar](max) NULL,
    [DatabaseName] [nvarchar](max) NULL,
    [DateTime] [datetime] NULL
) ON [PRIMARY]



Это триггер

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
CREATE TRIGGER [data_compression] 

ON ALL SERVER 
AFTER CREATE_TABLE 
AS 
DECLARE @SchemaName nvarchar(150),

@ObjectName nvarchar(150),
@DatabaseName nvarchar(150),
@cmd nvarchar(500)

--Получим имя схемы из выполняемой команды CREATE TABLE 
SET @SchemaName = EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(150)')
--Получим имя таблицы
SET @ObjectName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(150)')

--Получим имя базы
SET @DatabaseName = EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(150)')
--Сформируем из полученных данных требуемую команду на установку признака сжатия для таблицы
set @cmd = 'ALTER TABLE [' + @DatabaseName + '].[' + @SchemaName + '].[' + @ObjectName + '] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)'

--Теперь проверяем настройки – если базы нет в таблице CompressionSetting.dbo.Databases с признаком Active = 1, то выполняем команду, иначе игнорируем
IF NOT EXISTS (SELECT  1 AS Expr1
			FROM CompressionSetting.dbo.Databases AS T
			WHERE (name = @DatabaseName) AND Active = 1) 

BEGIN 
	INSERT INTO CompressionSetting.dbo.trace (text, DatabaseName, DateTime) SELECT @cmd, @DatabaseName, GETDATE()

	EXEC (@cmd) 
END
ELSE 

END



Теперь нужно добавить в исключения некоторые таблицы.
...
Рейтинг: 0 / 0
Как сделать исключение для одной таблице и для БД
    #40058118
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
субарбан,

Что у вас не получается и какие ваши варианты?
"Сделайте за меня" - это в подфорум Работа.
...
Рейтинг: 0 / 0
Как сделать исключение для одной таблице и для БД
    #40058373
субарбан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот таблица с исключениями, выше не правильно, она для логов.

Код: sql
1.
2.
3.
4.
CREATE TABLE [dbo].[Databases](
    [name] [nvarchar](100) NULL,
    [active] [int] NULL
) ON [PRIMARY]




В триггер хочу добавить

Код: sql
1.
2.
3.
4.
5.
IF NOT EXISTS (SELECT  1 AS Expr1
			FROM CompressionSetting.dbo.Databases AS T
			WHERE (name = @DatabaseName OR @ObjectName )  AND Active = 1) 

 


но это же бред.
Не понимаю как в этой выборке делать или-или.
...
Рейтинг: 0 / 0
Как сделать исключение для одной таблице и для БД
    #40058376
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
субарбан
Код: sql
1.
[DatabaseName] [nvarchar](max) NULL


Это действительно такая уникальная версия сервера, в которой имя БД может быть до 2 ГБ юникодного текста?
...
Рейтинг: 0 / 0
Как сделать исключение для одной таблице и для БД
    #40058402
субарбан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны, что с этим делать?

как сделать выбор или DatabaseName или ObjectName?
IF NOT EXISTS (SELECT 1 AS Expr1
FROM CompressionSetting.dbo.Databases AS T
WHERE (name = @DatabaseName OR @ObjectName ) AND Active = 1)
...
Рейтинг: 0 / 0
Как сделать исключение для одной таблице и для БД
    #40058416
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
субарбан
Код: sql
1.
WHERE (name = @DatabaseName OR @ObjectName)  AND Active = 1)

@ObjectName явно не типа Boolean, учитывая что такого типа в MSSQL нет; почему вы его ни с чем не сравниваете?

Или вы имеете в виду, что name может быть равен любой из этих переменных, что ли???
Код: sql
1.
2.
3.
4.
-- Тогда так
name = @DatabaseName OR name = @ObjectName
-- Или так
name in (@DatabaseName, @ObjectName)

Вас очень сложно понять.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сделать исключение для одной таблице и для БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]