>USE tempdb >GO >CREATE TABLE T1 ( > Z_id int IDENTITY(1,1)PRIMARY KEY, > Z_name varchar(20) NOT NULL) >CREATE TABLE T2 ( > Y_id int IDENTITY(100,5)PRIMARY KEY, > Y_name varchar(20) NULL) >>
>CREATE TRIGGER T1_trig >ON T1 >FOR INSERT AS > BEGIN > INSERT T2 VALUES ('') > END >>
>nAutoRefreshConn=SQLSTRINGCONNECT("DRIVER=SQL Server;SERVER=(local);Trusted_Connection=Yes;database=tempdb") > >Local oCA As CursorAdapter > >oCA=CREATEOBJECT("CursorAdapter") > >oCA.Alias = "CATest" >oCA.BufferModeOverride= 5 >oCA.DataSource= nAutoRefreshConn >oCA.DataSourceType="ODBC" >oCA.SelectCmd="select * from t1" >oCA.CursorSchema="z_id I, z_name C(10)" >oCA.UseCursorSchema= .T. >oCA.Tables="t1" >oCA.UpdatableFieldList="z_name" >oCA.UpdateNameList="z_id t1.z_id, z_name t1.z_name" >oCA.CursorFill() > >oCA.InsertCmdRefreshFieldList="z_id" >oCA.InsertCmdRefreshCmd="SELECT SCOPE_IDENTITY()" > >* oCA.InsertCmdRefreshCmd="SELECT @@IDENTITY" && CursorAdapter returns a wrong number >* oCA.InsertCmdRefreshCmd="SELECT z_id From t1 Where z_id = @@IDENTITY" && CursorAdapter returns an error: The refresh key defined for table is not found >* oCA.InsertCmdRefreshCmd="SELECT z_id From t1 Where z_id = SCOPE_IDENTITY()" && CursorAdapter returns an error: The refresh key defined for table is not found > >INSERT INTO CATest (z_name) VALUES ('Rodolfo') >INSERT INTO CATest (z_name) VALUES ('Denise') >INSERT INTO CATest (z_name) VALUES ('Carol') > >IF !TABLEUPDATE(.T.) > ? "TABLEUPDATE is failed!!!" > AERROR(aerrs) > DISPLAY MEMORY LIKE aerrs >ELSE > LIST >ENDIF >SQLDisconnect(nAutoRefreshConn) >Return .T. >>
>Record# z_id z_name >1 0 Rodolfo >2 0 Denise >3 0 Carol >>
>Record# z_id z_name >1 1 Rodolfo >2 2 Denise >3 3 Carol >4 0 Rodolfo >5 0 Denise >6 0 Carol >>
set implicit_transactions on exec sp_executesql N'INSERT INTO t1 (z_name) VALUES (@P1 )', N'@P1 varchar(10)', 'the text ' IF @@TRANCOUNT > 0 COMMIT TRAN set implicit_transactions offand InsertRefresh
SELECT SCOPE_IDENTITY()
the sp_executesql creates a scope nested that it is released to the sp exit, InsertCmd = "INSERT INTO t1 (z_name) VALUES (?CATest.s_name)
A proof, go in Query Analyzer and send:set implicit_transactions on exec sp_executesql N'INSERT INTO t1 (z_name) VALUES (@P1 )', N'@P1 varchar(10)', 'Rodolfo ' -- this return NULL SELECT SCOPE_IDENTITY() IF @@TRANCOUNT > 0 COMMIT TRAN set implicit_transactions off -- this return NULL SELECT SCOPE_IDENTITY()Result,