Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर पर लिंक की गई तालिका में जोड़ते समय गलत पहचान का उपयोग करने से रोकें

एक ओडीबीसी ट्रेस से पता चलता है कि एक्सेस वास्तव में कॉल कर रहा है 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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर (टी-एसक्यूएल) में डेटाबेस के संयोजन को कैसे दिखाएं

  2. SQL सर्वर सुरक्षा फ़ंक्शन को समझना HAS_Permis_BY_Name और इसके उपयोग के मामले

  3. SQL सर्वर प्रदर्शन निगरानी के बारे में शीर्ष 10 अक्सर पूछे जाने वाले प्रश्न

  4. SQL सर्वर में एक डेटाबेस की गतिविधि का विश्लेषण कैसे करें

  5. कैसे ठीक करें "से क्लॉज में बल्क रोसेट के लिए एक सहसंबंध नाम निर्दिष्ट किया जाना चाहिए।" SQL सर्वर में