Мне приходится иметь дело с таблицей, в которой есть набор полей, каждое из которых сопровождается вторым полем, которое будет содержать предлагаемое новое значение, пока это изменение не будет подтверждено.
Это выглядит примерно так:
refID field1 newField1 field2 newField2 ...
refID - это значение идентификатора, которое ссылается на основную таблицу. Одна строка в основной таблице может содержать n строк в моей таблице сведений. Типы данных включают в себя целые числа, строки и дату и время.
Теперь мне нужен запрос, который говорит мне, учитывая refID, если есть какие-либо предлагаемые изменения в таблице подробностей.
Я немного поигрался с некоторыми селекторами UNION, с COALESCE () и ISNULL () ... но все эти попытки в лучшем случае выглядели немного странно. БД MS-SQL-Server 2005.
Для прояснения моей проблемы:
--this is a simplification of the details table in question
CREATE TABLE [dbo].[TEST_TABLE](
[ID] [int] IDENTITY(1,1) NOT NULL,
[refID] [int] NOT NULL,
[firstName] [varchar](50) NULL,
[newFirstName] [varchar](50) NULL,
[lastName] [varchar](50) NULL,
[newLastName] [varchar](50) NULL
)
--here we insert a detail row ... one of many that might exist for the master table (e.g. data about the company)
insert into TEST_TABLE(refID, firstName, lastName) values(666, 'Bill', 'Ballmer')
--this is what happens when a user saves a suggested change
update TEST_TABLE SET newLastName = 'Gates' where ID = 1
--and this is what happens when this suggestion is accepted by a second user
update TEST_TABLE set lastName=newLastName, newLastName = NULL where ID = 1