एक ओडीबीसी ट्रेस से पता चलता है कि एक्सेस वास्तव में कॉल कर रहा है SELECT @@IDENTITY
(SCOPE_IDENTITY()
के विपरीत) ) SQL सर्वर लिंक्ड टेबल में पंक्ति डालने के बाद:
Database1 e00-1490 EXIT SQLExecDirectW with return code 0 (SQL_SUCCESS)
HSTMT 0x00000000004D6990
WCHAR * 0x000000000F314F28 [ -3] "INSERT INTO "dbo"."Table1" ("txt") VALUES (?)\ 0"
SDWORD -3
...
Database1 e00-1490 EXIT SQLExecDirectW with return code 0 (SQL_SUCCESS)
HSTMT 0x00000000004D6990
WCHAR * 0x000007FED7E6EE58 [ -3] "SELECT @@IDENTITY\ 0"
SDWORD -3
इसके अलावा, यह व्यवहार उपयोग किए जा रहे ओडीबीसी ड्राइवर पर निर्भर प्रतीत होता है, क्योंकि MySQL कनेक्टर/ओडीबीसी के साथ एक समान परीक्षण से पता चलता है कि एक्सेस संबंधित MySQL फ़ंक्शन को कॉल नहीं करता है LAST_INSERT_ID()
एक MySQL लिंक्ड टेबल में एक पंक्ति डालने के बाद।
यह देखते हुए कि एक्सेस कॉल कर रहा है SELECT @@IDENTITY
, हमें अपने ट्रिगर को निम्नानुसार संशोधित करना होगा (स्रोत: यहाँ
) @@ पहचान मान को उसके मूल मान पर वापस रीसेट करने के लिए
create trigger mytable_insert_trigger on mytable for insert as
declare @identity int
declare @strsql varchar(128)
set @[email protected]@identity
--your code
--insert into second table ...
--your code
set @strsql='select identity (int, ' + cast(@identity as varchar(10)) + ',1) as id into #tmp'
execute (@strsql)