|
Posted by V T on 12/23/05 16:09
I guess you are right. Strange thing then that this discrepancy betweeen doc
and product still not fixed in "SQL2000+5years" version.
"Erland Sommarskog" <esquel@sommarskog.se> wrote in message
news:Xns9734E76664139Yazorman@127.0.0.1...
> V T (moreaboutit@hotmail.com) writes:
> > SQL Server 2000 documentation
> >
http://www.microsoft.com/technet/prodtechnol/sql/2000/reskit/part10/c3761.mspx
> > states that if view is using "NOT NULL" columns of a base table, then
> > insert/update performed on a view must provide dummy values for those
> > columns, and code of the trigger should ignore them.
> >
> > But I cannot reproduce this restriction. Code below pasted to
> > QueryAnalyser shows that I can not supply dummy values for "NOT NULL"
> > fields when I update view and still have update done. What do I miss ?
>
> It seems that text goes a bit too far, and drags UPDATE into the business
> when it shouldn't. I tried with an INSTEAD OF trigger, and found that
> I had to specify dummy values all over the place.
>
> SET NOCOUNT ON
> CREATE TABLE TestTable
> (
> KeyField INT IDENTITY(1,1),
> DataField1 INT NOT NULL,
> DataField2 INT DEFAULT 1 NOT NULL
> )
> go
> CREATE VIEW TestView AS
> SELECT * FROM TestTable
>
> go
> --setup step 3. execute only inside of this comment
> CREATE TRIGGER TestViewTrig_IU
> ON dbo.TestView
> INSTEAD OF INSERT
> AS
> BEGIN
> SET NOCOUNT ON
>
> INSERT TestTable (DataField1, DataField2)
> SELECT DataField1, DataField2
> FROM inserted
>
> END
>
> go
> --setup step 4. execute only inside of this comment
> INSERT INTO TestView (KeyField, DataField1,DataField2) Values (0,1,2)
> INSERT INTO TestView (KeyField, DataField1,DataField2) Values (0,3,4)
> INSERT INTO TestView (KeyField, DataField1,DataField2) Values (0,5,6)
> INSERT INTO TestView (KeyField, DataField1, DataField2)
> Values (0,DEFAULT, 56)
> INSERT INTO TestView (KeyField, DataField1, DataField2)
> Values (0,156, DEFAULT)
>
> go
> SELECT * FROM TestView
> -- SQL Server lets me not specify DataField2 when update DataField1
orreverse,
> -- which is opposed to what documentation says
> go
> UPDATE TestView SET DataField1 = DataField1 + 1 where KeyField = 2
> UPDATE TestView SET DataField2 = DataField2 + 1 where KeyField = 3
> SELECT * FROM TestView
>
>
> go
> -- remove test environment
> DROP VIEW TestView
> DROP TABLE TestTable
>
>
>
>
>
>
> --
> Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
>
> Books Online for SQL Server 2005 at
> http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
> Books Online for SQL Server 2000 at
> http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
Navigation:
[Reply to this message]
|