Ууффф... а я уж думал, не ответит никто
Про шарп - ну не я же заинтродьюсил такие таблицы. Это сделали наши зарубежные коллеги, а мы теперь расхлебываем.
Про (*) и (**) - перехожу к реальным объектам:
Есть таблицы:
- Код: Выделить всё
CREATE TABLE [dbo].[MappingModelsTable] (
[networkID] [tinyint] NOT NULL ,
[mappingModel] [varchar] (30) ,
[trxPerCell] [tinyint] NOT NULL ,
[trxNumber] [tinyint] NOT NULL ,
[transceiverType] [varchar] (30) ,
[priority] [tinyint] NULL ,
[rowID] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[TDMAModelsTable] (
[networkID] [tinyint] NOT NULL ,
[tdmaName] [varchar] (30) COLLATE Cyrillic_General_CI_AS NOT NULL ,
[TS0] [tinyint] NULL ,
[TS1] [tinyint] NULL ,
[TS2] [tinyint] NULL ,
[TS3] [tinyint] NULL ,
[TS4] [tinyint] NULL ,
[TS5] [tinyint] NULL ,
[TS6] [tinyint] NULL ,
[TS7] [tinyint] NULL ,
[rowID] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]
и представления:
- Код: Выделить всё
Create View dbo.CTFGSM1204MappingModelView
As
Select
'networkId' = Map.networkId,
'mappingModel' = Map.mappingModel,
'trxPerCell' = Map.trxPerCell,
'trxNumber' = Map.trxNumber,
'transceiverType' = Map.transceiverType,
'priority' = Map.priority
From
MappingModelsTable Map
Create View CTFGSM1204TdmaModelView
As
Select
'networkId' = networkId,
'tdmaName' = tdmaName,
'TS0' = TS0,
'TS1' = TS1,
'TS2' = TS2,
'TS3' = TS3,
'TS4' = TS4,
'TS5' = TS5,
'TS6' = TS6,
'TS7' = TS7
From
TDMAModelsTable
Вот мы создаем наши временные таблички:
- Код: Выделить всё
SELECT TOP 0 * INTO TMPCTFGSM1204TdmaModelView FROM CTFGSM1204TdmaModelView
SELECT TOP 0 * INTO TMPCTFGSM1204MappingModelView FROM CTFGSM1204MappingModelView
не смущайтесь, что у них суффикс View - это также заслуга наших коллег.
После этого происходит тот самый апдейт:
- Код: Выделить всё
UPDATE TMPCTFGSM1204MappingModelView
SET transceiverType = TRef.tdmaName
FROM TMPCTFGSM1204MappingModelView AS MTmp
INNER JOIN TMPCTFGSM1204TDMAModelView AS TTmp
ON MTmp.transceiverType = TTmp.tdmaName
INNER JOIN TDMAModelsTable AS TRef
ON ( TTmp.TS0 = TRef.TS0 OR (TTmp.TS0 IS NULL AND TRef.TS0 IS NULL) )
AND ( TTmp.TS1 = TRef.TS1 OR (TTmp.TS1 IS NULL AND TRef.TS1 IS NULL) )
AND ( TTmp.TS2 = TRef.TS2 OR (TTmp.TS2 IS NULL AND TRef.TS2 IS NULL) )
AND ( TTmp.TS3 = TRef.TS3 OR (TTmp.TS3 IS NULL AND TRef.TS3 IS NULL) )
AND ( TTmp.TS4 = TRef.TS4 OR (TTmp.TS4 IS NULL AND TRef.TS4 IS NULL) )
AND ( TTmp.TS5 = TRef.TS5 OR (TTmp.TS5 IS NULL AND TRef.TS5 IS NULL) )
AND ( TTmp.TS6 = TRef.TS6 OR (TTmp.TS6 IS NULL AND TRef.TS6 IS NULL) )
AND ( TTmp.TS7 = TRef.TS7 OR (TTmp.TS7 IS NULL AND TRef.TS7 IS NULL) )
AND TRef.networkId = @networkId
Он переставляет значения
transceiverType ... Но если вместо
TMPCTFGSM1204MappingModelView использовать статическую таблицу и копировать ее содержимое в
TMPCTFGSM1204MappingModelView после апдейта, то никаких перестановок не происходит
