Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 доступ к полю по его порядковому номеру  [new]
faustrash
Member

Откуда:
Сообщений: 110
можно ли по номеру поля узнать его имя и значения?
13 авг 09, 12:32    [7532615]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Glory
Member

Откуда:
Сообщений: 104760
faustrash
можно ли по номеру поля узнать его имя и значения?

У полей нет порядковых номеров.
13 авг 09, 12:34    [7532633]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
faustrash
Member

Откуда:
Сообщений: 110
а как можно перебрать все поля?
13 авг 09, 12:34    [7532639]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Glory
Member

Откуда:
Сообщений: 104760
faustrash
а как можно перебрать все поля?

Универсальный триггер пишем, да ?
13 авг 09, 12:35    [7532642]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
через adodb.recordset получив результат запроса по SCHEMA конкретной таблицы можно обратиться через колекцию Fields по номеру.
13 авг 09, 12:36    [7532647]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
iljy
Member

Откуда:
Сообщений: 8711
faustrash,

select * from INFORMATION_SCHEMA.COLUMNS
where Table_Name = 'Имя таблицы'
13 авг 09, 12:37    [7532657]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
INFORMATION_SCHEMA.COLUMNS
13 авг 09, 12:37    [7532658]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
faustrash
Member

Откуда:
Сообщений: 110
пишу триггер, не знаю универсальный ли)
при update хочу просмотреть все поля, а измененные записать в лог
13 авг 09, 12:38    [7532671]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
faustrash
при update хочу просмотреть все поля, а измененные записать в лог
соседняя тема Триггер "изменилось ли значение поля" не поможет?
13 авг 09, 12:42    [7532688]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Glory
Member

Откуда:
Сообщений: 104760
faustrash
пишу триггер, не знаю универсальный ли)

Универсальный - это типа который не зависит от изменений структуры таблицы.
При кажущихся меньших затратах на создание такой триггер получится громоздким и малопроизводительным, с динамическими запросами и временными таблицами
13 авг 09, 12:42    [7532690]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
faustrash
Member

Откуда:
Сообщений: 110
Да, тогда универсальный... скорость меньше всего беспокоит
Паганель, ту тему тоже я создал... у меня много вопросов появляется)
Спасибо всем, разобрался)
13 авг 09, 12:47    [7532748]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Паганель
faustrash
при update хочу просмотреть все поля, а измененные записать в лог
соседняя тема Триггер "изменилось ли значение поля" не поможет?
Так это его же тема!
13 авг 09, 13:16    [7533054]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
faustrash
Да, тогда универсальный... скорость меньше всего беспокоит
Паганель, ту тему тоже я создал... у меня много вопросов появляется)
Спасибо всем, разобрался)
Текст триггера не покажете? Интересно же!
Опять же, покритикуем...
13 авг 09, 13:19    [7533075]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
faustrash
Member

Откуда:
Сообщений: 110
Универсальностью принебрег) Просто перечислил все столбцы, вот текст
USE REPORT
GO

IF OBJECT_ID('LogReport','U') IS NOT NULL
	DROP TABLE LogReport;

CREATE TABLE LogReport(
	idLog			int identity,
	[user_name]		nvarchar(256) default suser_sname(),
	[datetime]		datetime default getdate(),
	op				nvarchar(10),
    table_name		sysname,
    rec_id			int,
    column_name		nvarchar(50),
    value			sql_variant
)
GO



IF OBJECT_ID ('tr_Log','TR') IS NOT NULL
   DROP TRIGGER tr_Log;
GO

CREATE TRIGGER tr_Log
   ON  [Otchet]
   AFTER UPDATE
AS
begin
	declare @newval		sql_variant,
		@exval			sql_variant		
	
-----------------[Vh NRTB]
	select @newval = t.[Vh NRTB]
	from [Otchet] as t
	select @exval = d.[Vh NRTB]
	from deleted as d
	inner join [Otchet] as t on t.[Nomer otcheta] = d.[Nomer otcheta]
	
	if @newval <> @exval
	begin
		insert into LogReport (op, table_name, rec_id, column_name, value)
		select 'update', 'Otchet', id, '[Vh NRTB]', @newval from inserted
	end
-----------------[Vh nomer NRTB]
	select @newval = t.[Vh nomer NRTB]
	from [Otchet] as t
	select @exval = d.[Vh nomer NRTB]
	from deleted as d
	inner join [Otchet] as t on t.[Nomer otcheta] = d.[Nomer otcheta]
	
	if @newval <> @exval
	begin
		insert into LogReport (op, table_name, rec_id, column_name, value)
		select 'update', 'Otchet', id, '[Vh nomer NRTB]', @newval from inserted
	end
-----------------[Identifikator nomera]
...
end
GO
13 авг 09, 13:47    [7533364]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Glory
Member

Откуда:
Сообщений: 104760
И что будет если UPDATE обновит больше одной записи ?
13 авг 09, 13:53    [7533419]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
faustrash
Member

Откуда:
Сообщений: 110
добавится больше одной строки, так и задумано
13 авг 09, 14:03    [7533498]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
faustrash
	select @exval = d.[Vh NRTB]
	from deleted as d
	inner join [Otchet] as t on t.[Nomer otcheta] = d.[Nomer otcheta]
Представим себе, что в deleted две записи
Какое именно значение из двух будет помещено в переменную @exval ?
13 авг 09, 14:06    [7533517]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
Волшебный триггер. Перевожу, что вы написали: "Если случайное значение поля Vh NRTB из таблицы Otchet не равно случайному обновленному значению того же поля той же таблицы, то записать аудит." По второму полю такой же бред.
13 авг 09, 14:07    [7533527]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Glory
Member

Откуда:
Сообщений: 104760
faustrash
добавится больше одной строки, так и задумано

Да что вы говорите ? И каким же образом в переменных @newval и @exval получатся данные из нескольких записей ?
13 авг 09, 14:07    [7533528]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
faustrash
Member

Откуда:
Сообщений: 110
блин, да... не совсем значит разобрался с deleted
а что тогда делать?
13 авг 09, 14:15    [7533585]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
Glory
Member

Откуда:
Сообщений: 104760
faustrash
блин, да... не совсем значит разобрался с deleted
а что тогда делать?

Читать ссылку про журналирование, которую вам дали в перой вашей теме
13 авг 09, 14:21    [7533626]     Ответить | Цитировать Сообщить модератору
 Re: доступ к полю по его порядковому номеру  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
faustrash
блин, да... не совсем значит разобрался с deleted
а что тогда делать?
Не зря, значит, я Вас просил текст триггера опубликовать!
В общем, общий принцип такой.
1. Забудьте о переменных в триггере (по крайней мере, на время)
2. Опирайтесь на deleted и inserted как на обычные таблицы, которые можно поместить в SELECT,
джойнить с другими таблицами, ограничивать с помощью WHERE и т.д.
3. Вспомните синтаксис INSERT ... SELECT ... FROM ... JOIN ... WHERE ...(или впервые посмотрите на него в BOL).
Это поможет вставить много записей в журнал одной командой.
13 авг 09, 16:38    [7534847]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить