2015-04-15 5 views
0

Надеюсь, кто-то может с этим помочь. У меня есть две таблицы (структура ниже):вставить данные в связанные таблицы через вид sql-сервера

Table1 
DataYear INT Not Null, 
ProvId INT Not Null, 
LKId INT Not Null, 
UpdateTime Datetime2(2) Not Null, 
JTimes INT Not Null 

Table2 
DataYear INT Not Null, 
ProvId INT Not Null, 
LKId INT Not Null, 
UpdateTime Datetime2(2) Not Null, 
IsSuspect BIT, 
Recs VARCHAR(10) 

PK для обеих таблиц - первые 4 столбца. Представление будет принимать все значения из Таблицы 1 и последних двух столбцов из таблицы 2.

Я хочу сделать вставку данных в представление и все столбцы в обоих заполненных таблицах. Это возможно? Как мне это сделать?

Надежда кто-то может помочь

Благодарности

Alex

+0

Вам не нужно заполнять представление. –

+0

Не имеет смысла, вы вставляете данные в таблицы, а затем их просматривает. –

+1

Запретить изменение нескольких таблиц в обновляемом представлении. обратитесь к этому http://stackoverflow.com/questions/7281054/sql-updatable-view-with-joined-tables – ughai

ответ

1

Вы можете использовать INSEAD OF INSERT триггер на представлении для вставки данных в несколько таблиц.

CREATE TABLE dbo.Table1 
    (
     DataYear int NOT NULL 
    , ProvId int NOT NULL 
    , LKId int NOT NULL 
    , UpdateTime datetime2(2) NOT NULL 
    , JTimes int NOT NULL 
    , CONSTRAINT PK_Table1 PRIMARY KEY(
      DataYear 
     , ProvId 
     , LKId 
     , UpdateTime) 
    ); 

CREATE TABLE dbo.Table2 
    (
     DataYear int NOT NULL 
    , ProvId int NOT NULL 
    , LKId int NOT NULL 
    , UpdateTime datetime2(2) NOT NULL 
    , IsSuspect bit 
    , Recs varchar(10) 
    , CONSTRAINT PK_Table2 PRIMARY KEY(
      DataYear 
     , ProvId 
     , LKId 
     , UpdateTime) 
    ); 
GO 

CREATE VIEW dbo.View1 AS 
SELECT 
     Table1.DataYear 
    , Table1.ProvId 
    , Table1.LKId 
    , Table1.UpdateTime 
    , Table1.JTimes 
    , Table2.IsSuspect 
    , Table2.Recs 
FROM dbo.Table1 
JOIN dbo.Table2 ON 
     Table2.DataYear = Table1.DataYear 
    AND Table2.ProvId = Table1.ProvId 
    AND Table2.LKId = Table1.LKId 
    AND Table2.UpdateTime = Table1.UpdateTime 
GO 

CREATE TRIGGER INSTEAD_OF_INSERT_View1 
ON dbo.View1 INSTEAD OF INSERT AS 
INSERT INTO dbo.Table1(
     DataYear 
    , ProvId 
    , LKId 
    , UpdateTime 
    , JTimes) 
SELECT 
     DataYear 
    , ProvId 
    , LKId 
    , UpdateTime 
    , JTimes 
FROM inserted; 

INSERT INTO dbo.Table2(
     DataYear 
    , ProvId 
    , LKId 
    , UpdateTime 
    , IsSuspect 
    , Recs) 
SELECT 
     DataYear 
    , ProvId 
    , LKId 
    , UpdateTime 
    , IsSuspect 
    , Recs 
FROM inserted; 
GO 

INSERT INTO dbo.View1 
     (DataYear 
     , ProvId 
     , LKId 
     , UpdateTime 
     , JTimes 
     , IsSuspect 
     , Recs 
     ) 
VALUES (1 
     , 1 
     , 1 
     , SYSDATETIME() 
     , 1 
     , 1 
     , '1' 
     ); 
GO 
+0

Спасибо, Dan, что я был находясь в поиске! – denimknight

Смежные вопросы