Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
Здраствуйте подскажите пожалуйста!

Данный триггер формирует строку и вставляет ее в поле КадУчастокН
ЧТО записать в WHERE чтобы при срабатывании он работал только с текущей строкой ? а может я еще что забыл дописать ?

C Уважением...

К сообщению приложен файл. Размер - 0Kb
8 июл 05, 08:14    [1686490]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
В триггер попадают все строки, которые подвергаются изменениям в выражении.
8 июл 05, 08:24    [1686500]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
я изменяю одну строку в КадУчасток, а изменения проходят по всем строкам
C Уважением...
8 июл 05, 08:33    [1686513]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Какая колонка в таблице КадУчасток является ключевой?
И не постите текст скрипта рисунком, постите текстом и обкладывайте его тегами
[src][/SRC]
8 июл 05, 08:36    [1686519]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
ключевое поле : КадУчастокКод
C Уважением...
8 июл 05, 08:37    [1686527]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
-ALeXX79-
ключевое поле : КадУчастокКод
C Уважением...
Ну, а текст триггер (сильно руками неохота ваш текст колбасить ;-) )
8 июл 05, 08:41    [1686536]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
CREATE TRIGGER Test ON dbo.КадУчасток
FOR INSERT, UPDATE
AS
SET NOCOUNT ON
BEGIN
UPDATE dbo.КадУчасток
SET dbo.КадУчасток.КадУчастокН = dbo.нКадКвартал.КадКвартал + N':' +
ISNULL(ISNULL(dbo.СтатусКадНомера.СтатусКадНомераСкрНаименование +
ISNULL(REPLACE(SPACE(3 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)),
ISNULL(REPLACE(SPACE(4 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер))), N'Код' +
LTRIM(STR(dbo.КадУчасток.КадУчастокКод)))
FROM dbo.КадУчасток LEFT OUTER JOIN
dbo.СтатусКадНомера ON dbo.КадУчасток.СтатусКадНомераКод =
dbo.СтатусКадНомера.СтатусКадНомераКод LEFT OUTER JOIN
dbo.нКадКвартал ON dbo.КадУчасток.КадКварталКод = dbo.нКадКвартал.КадКварталКод

WHERE
END;

C Уважением...
8 июл 05, 08:42    [1686539]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Хотя... Сделайте inner join таблицы КадУчасток с виртуальной таблицей INSERTED по колонке КадУчастокКод и ни какого условия не надо.
8 июл 05, 08:42    [1686541]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
А если поместить его (как говорил tpg) внутри тегов [src][/SRC] - то красиво будет))
8 июл 05, 08:43    [1686543]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
tpg
Хотя... Сделайте inner join таблицы КадУчасток с виртуальной таблицей INSERTED по колонке КадУчастокКод и ни какого условия не надо.


а как, можно подробнее впервые с триггерами столкнулся
8 июл 05, 08:44    [1686545]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
CREATE TRIGGER Test ON dbo.КадУчасток
FOR INSERT, UPDATE
AS 
SET NOCOUNT ON 

UPDATE dbo.КадУчасток
SET dbo.КадУчасток.КадУчастокН = dbo.нКадКвартал.КадКвартал + N':' + 
ISNULL(ISNULL(dbo.СтатусКадНомера.СтатусКадНомераСкрНаименование + 
ISNULL(REPLACE(SPACE(3 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)), 
ISNULL(REPLACE(SPACE(4 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер))), N'Код' + 
LTRIM(STR(dbo.КадУчасток.КадУчастокКод)))
FROM dbo.КадУчасток inner join
inserted i on dbo.КадУчасток.КадУчастокКод = i.КадУчастокКод LEFT OUTER JOIN
dbo.СтатусКадНомера ON dbo.КадУчасток.СтатусКадНомераКод = 
dbo.СтатусКадНомера.СтатусКадНомераКод LEFT OUTER JOIN
dbo.нКадКвартал ON dbo.КадУчасток.КадКварталКод = dbo.нКадКвартал.КадКварталКод

8 июл 05, 08:45    [1686548]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
SanyL
А если поместить его (как говорил tpg) внутри тегов [src][/SRC] - то красиво будет))


CREATE TRIGGER Test ON dbo.КадУчасток
FOR INSERT, UPDATE
AS
SET NOCOUNT ON
BEGIN
UPDATE
dbo.КадУчасток
SET dbo.КадУчасток.КадУчастокН = dbo.нКадКвартал.КадКвартал + N':' +
ISNULL(ISNULL(dbo.СтатусКадНомера.СтатусКадНомераСкрНаименование +
ISNULL(REPLACE(SPACE(3 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)),
ISNULL(REPLACE(SPACE(4 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер))), N'Код' +
LTRIM(STR(dbo.КадУчасток.КадУчастокКод)))
FROM dbo.КадУчасток LEFT OUTER JOIN
dbo.СтатусКадНомера ON dbo.КадУчасток.СтатусКадНомераКод =
dbo.СтатусКадНомера.СтатусКадНомераКод LEFT OUTER JOIN dbo.нКадКвартал ON dbo.КадУчасток.КадКварталКод = dbo.нКадКвартал.КадКварталКод

WHERE

END;
8 июл 05, 08:50    [1686560]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
CREATE TRIGGER Test ON dbo.КадУчасток
FOR INSERT, UPDATE
AS
SET NOCOUNT ON
BEGIN
UPDATE dbo.КадУчасток
SET dbo.КадУчасток.КадУчастокН = dbo.нКадКвартал.КадКвартал + N':' +
ISNULL(ISNULL(dbo.СтатусКадНомера.СтатусКадНомераСкрНаименование +
ISNULL(REPLACE(SPACE(3 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)),
ISNULL(REPLACE(SPACE(4 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер))), N'Код' +
LTRIM(STR(dbo.КадУчасток.КадУчастокКод)))
FROM dbo.КадУчасток LEFT OUTER JOIN
dbo.СтатусКадНомера ON dbo.КадУчасток.СтатусКадНомераКод =
dbo.СтатусКадНомера.СтатусКадНомераКод LEFT OUTER JOIN dbo.нКадКвартал ON dbo.КадУчасток.КадКварталКод = dbo.нКадКвартал.КадКварталКод

WHERE

END;

во как))
8 июл 05, 08:51    [1686562]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
2 -ALeXX79-

А вот для тренировок тут есть специальный форум Test
8 июл 05, 08:52    [1686564]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
tpg
CREATE TRIGGER Test ON dbo.КадУчасток
FOR INSERT, UPDATE
AS 
SET NOCOUNT ON 

UPDATE dbo.КадУчасток
SET dbo.КадУчасток.КадУчастокН = dbo.нКадКвартал.КадКвартал + N':' + 
ISNULL(ISNULL(dbo.СтатусКадНомера.СтатусКадНомераСкрНаименование + 
ISNULL(REPLACE(SPACE(3 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)), 
ISNULL(REPLACE(SPACE(4 - LEN(LTRIM(STR(dbo.КадУчасток.КадУчастокНомер)))), ' ', '0'), N'') +
LTRIM(STR(dbo.КадУчасток.КадУчастокНомер))), N'Код' + 
LTRIM(STR(dbo.КадУчасток.КадУчастокКод)))
FROM dbo.КадУчасток inner join
inserted i on dbo.КадУчасток.КадУчастокКод = i.КадУчастокКод LEFT OUTER JOIN
dbo.СтатусКадНомера ON dbo.КадУчасток.СтатусКадНомераКод = 
dbo.СтатусКадНомера.СтатусКадНомераКод LEFT OUTER JOIN
dbo.нКадКвартал ON dbo.КадУчасток.КадКварталКод = dbo.нКадКвартал.КадКварталКод



QA Завис (
8 июл 05, 08:53    [1686567]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Да не надо чейто код цитировать без необходимости...

когда пишите сообщение - вверху есть кнопки. там есть кнопка SRC - на нее нажимаете = появляется 2 тэга, между этими тэнами вам и надо поместить кусок вашего кода чтобы он выглядел подобным образом
8 июл 05, 08:58    [1686573]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
SanyL
Да не надо чейто код цитировать без необходимости...

когда пишите сообщение - вверху есть кнопки. там есть кнопка SRC - на нее нажимаете = появляется 2 тэга, между этими тэнами вам и надо поместить кусок вашего кода чтобы он выглядел подобным образом


Хорошо учту, но Query висит (
8 июл 05, 09:00    [1686579]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
-ALeXX79-
QA Завис (
Скрипт таблицы со всеми индексами и констрэйнтами в студию.
8 июл 05, 09:02    [1686585]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
tpg
-ALeXX79-
QA Завис (
Скрипт таблицы со всеми индексами и констрэйнтами в студию.


могу только структуру, таблица создавалась давным давно в аксессе
8 июл 05, 09:10    [1686603]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
-ALeXX79-
tpg
-ALeXX79-
QA Завис (
Скрипт таблицы со всеми индексами и констрэйнтами в студию.


могу только структуру, таблица создавалась давным давно в аксессе
В ЕМ в контестном меню таблицы выбрать пункт меню в пункте Все задачи выбрать пункт Generate SQL Script...
8 июл 05, 09:14    [1686612]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[КадУчасток]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[КадУчасток]
GO

CREATE TABLE [dbo].[КадУчасток] (
	[КадУчастокКод] [int] NOT NULL ,
	[КадКварталКод] [int] NOT NULL ,
	[КадКварталНовыйКод] [int] NULL ,
	[СтатусКадНомераКод] [int] NULL ,
	[КадУчастокНомер] [int] NULL ,
	[КадУчастокПредНомера] [nvarchar] (255) COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокНаименование] [nvarchar] (255) COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокОрр] [nvarchar] (255) COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокОррПолож] [int] NULL ,
	[КадУчастокS] [float] NOT NULL ,
	[КадУчастокТЗСS] [float] NOT NULL ,
	[КадУчастокТССS] [float] NOT NULL ,
	[КадУчастокТБОS] [float] NOT NULL ,
	[КадУчастокДатаСъемки] [datetime] NULL ,
	[ИсполнительСъемкиКод] [int] NULL ,
	[ФункРайонКод] [int] NULL ,
	[КадУчастокУчасток] [nvarchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
	[ЗонаКод] [int] NULL ,
	[КадУчастокКвартал] [nvarchar] (5) COLLATE Cyrillic_General_CI_AS NULL ,
	[ПроезЧастьКод] [int] NULL ,
	[КадУчастокДом] [nvarchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокКвартира] [nvarchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокПозиция] [nvarchar] (5) COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокОррРасст] [int] NULL ,
	[КадУчастокОррНапр] [char] (255) COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокРасположение] [nvarchar] (255) COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокРазрИсп] [text] COLLATE Cyrillic_General_CI_AS NULL ,
	[ЗонаФункНазнКод] [int] NULL ,
	[КадУчастокФактИсп] [text] COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокДатаОсвоб] [datetime] NULL ,
	[КадУчастокПримечания] [ntext] COLLATE Cyrillic_General_CI_AS NULL ,
	[КадУчастокНомер1] [nvarchar] (14) COLLATE Cyrillic_General_CI_AS NULL ,
	[ДатаСозд] [datetime] NULL ,
	[СоздательКод] [int] NULL ,
	[ДатаЛикв] [datetime] NULL ,
	[ЛиквидаторКод] [int] NULL ,
	[Очередность] [int] NULL ,
	[КадУчастокН] [nvarchar] (255) COLLATE Cyrillic_General_CI_AS NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


C Уважением...
8 июл 05, 09:17    [1686618]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А остальное?
8 июл 05, 10:16    [1686786]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
нКадКвартал
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[нКадКвартал]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[нКадКвартал]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

CREATE VIEW dbo.нКадКвартал
AS
SELECT     КадКварталКод, '63:09:' + SUBSTRING(КадКварталНомер, 1, 2) + ' ' + SUBSTRING(КадКварталНомер, 3, 2) + ' ' + SUBSTRING(КадКварталНомер, 
                      5, 3) AS КадКвартал
FROM         dbo.КадКвартал

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO




if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[СтатусКадНомера]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[СтатусКадНомера]
GO

CREATE TABLE [dbo].[СтатусКадНомера] (
	[СтатусКадНомераКод] [int] IDENTITY (1, 1) NOT NULL ,
	[СтатусКадНомераПлнНаименование] [nvarchar] (30) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[СтатусКадНомераСкрНаименование] [nvarchar] (1) COLLATE Cyrillic_General_CI_AS NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[СтатусКадНомера] ADD 
	CONSTRAINT [aaaaaСтатусКадНомера_PK] PRIMARY KEY  NONCLUSTERED 
	(
		[СтатусКадНомераКод]
	)  ON [PRIMARY] 
GO

 CREATE  UNIQUE  INDEX [СтатусКадНомераПлнНаименование] ON [dbo].[СтатусКадНомера]([СтатусКадНомераПлнНаименование]) ON [PRIMARY]
GO



C Уважением...
8 июл 05, 10:23    [1686816]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Я про констрейнты таблицы КадУчасток спрашивал.
8 июл 05, 10:27    [1686840]     Ответить | Цитировать Сообщить модератору
 Re: Как записать условие ?  [new]
-ALeXX79-
Member

Откуда: Тольятти
Сообщений: 136
tpg
Я про констрейнты таблицы КадУчасток спрашивал.

прошу прощения за терпение, но как из посмотреть
8 июл 05, 10:30    [1686855]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить