2012-12-01 16 views
7

मैंने इसे पहले कभी नहीं देखा है, बहुत अजीब है।विषम SQL सर्वर 2012 पहचान समस्या

मेरे पास एक स्थानीय SQL सर्वर 2012 एक्सप्रेस डेटाबेस है जिसके विरुद्ध मैं विकास कर रहा हूं। TestDrive प्लगइन का उपयोग करके परीक्षणों का एक सरल सूट चला रहा है और ईएफ v5 के साथ डेटाबेस तक पहुंच रहा है।

मैंने अभी एक परीक्षण चलाया जो डेटाबेस में एक रिकॉर्ड दर्ज करता है। आईडी 1-9 से जाने वाली मेज में 9 पंक्तियां थीं। अगले डालने और आईडी बिल्कुल 10000 से कूद गया !!!!

आईडी स्तंभ जाता है:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10009 

मैं विफल रहा है पता आवेषण भी आईडी को बढ़ा देते है, लेकिन मैं गारंटी ले सकते हैं कि 10,000 5 सेकंड में सम्मिलित करने के लिए के बीच परीक्षण चलाता है असफल नहीं था ...

तालिका संरचना वास्तव में सरल है, स्तंभों का एक समूह और एक ऑटो वृद्धि, bigint (लंबी), कोई एसपी, ट्रिगर्स या कोई अन्य प्रोग्रामेटिक सामग्री की पहचान कॉलम नहीं है।

[Id] [bigint] IDENTITY(1,1) NOT NULL, 

बहुत भ्रमित, क्या किसी और ने यह देखा है?

+0

में पढ़ा मैं नहीं दिख रहा है कि कैसे यह मेरे कोड हो सकता है। कोड आईडी के साथ कुछ भी नहीं करता है और यह एक INSERT कमांड है, न कि UPDATE कमांड और यदि INSERT ने आईडी लागू करने का प्रयास किया है तो यह केवल आईडी मान को अनदेखा कर देगा ... – Jammer

+0

ऐसा लगता है कि यह 2012 में एक बग हो सकता है यहां दूसरों द्वारा भी रिपोर्ट की गई ... http://connect.microsoft.com/SQLServer/feedback/details/743300/identity-column-jumps-by-seed-value#tabs मैंने अभी इसके लिए एक लॉग जोड़ा है अच्छी तरह से ... – Jammer

+0

लगता है कि यह एसक्यूएल इंजन के पुनरारंभ के कारण होता है ... लेकिन जब मेरा बीज 1 है तो यह 10000 कूद जाएगा क्यों थोड़ा पागल है ... – Jammer

उत्तर

2

यह blog post कुछ अतिरिक्त विवरण है। ऐसा लगता है कि 2012 में, identity अनुक्रम के रूप में लागू किया गया है। और डिफ़ॉल्ट रूप से, एक अनुक्रम में कैश होता है। यदि कैश गुम हो जाता है तो आप कैश में अनुक्रम मान खो देते हैं।

प्रस्तावित समाधान no cache साथ एक दृश्य बनाने के लिए है:

CREATE SEQUENCE TEST_Sequence 
    AS INT 
    START WITH 1 
    INCREMENT BY 1 
    NO CACHE 

जहां तक ​​मैं देख सकता हूँ, एक पहचान स्तंभ के पीछे अनुक्रम अदृश्य है। आप कैशिंग अक्षम करने के लिए इसकी गुणों को नहीं बदल सकते हैं।

एंटिटी फ्रेमवर्क के साथ इसका उपयोग करने के लिए, आप प्राथमिक कुंजी के StoredGeneratedPattern को Computed पर सेट कर सकते हैं। तो फिर तुम एक instead of insert ट्रिगर में पहचान सर्वर साइड उत्पन्न कर सकता है: यदि आप एक बेहतर समाधान मिल जाए

if exists (select * from sys.sequences where name = 'Sequence1') 
    drop sequence Sequence1 
if exists (select * from sys.tables where name = 'Table1') 
    drop table Table1 
if exists (select * from sys.triggers where name = 'Trigger1') 
    drop trigger Trigger1 
go 
create sequence Sequence1 
    as int 
    start with 1 
    increment by 1 
    no cache 
go 
create table Table1 
    (
    id int primary key, 
    col1 varchar(50) 
    ) 
go 
create trigger Trigger1 
    on Table1 
    instead of insert 
as 
insert Table1 
     (ID, col1) 
select next value for Sequence1 
,  col1 
from inserted 
go 
insert Table1 (col1) values ('row1'); 
insert Table1 (col1) values ('row2'); 
insert Table1 (col1) values ('row3'); 

select * 
from Table1 

,, मुझे पता है :)

+0

अहह ... यह दिलचस्प है। मैं देखूंगा कि क्या मैं इस कैश दृष्टिकोण को ईएफ के साथ काम कर सकता हूं ... – Jammer

+0

हम्म ...कि सब मेरे लिए थोड़ा गन्दा लग रहा है :(मैं देखता हूं कि मुझे इसके बारे में कुछ मिल सकता है और – Jammer

+0

पर रिपोर्ट करें दरअसल, आपको पता है कि मुझे क्या पता है। मुझे यकीन नहीं है कि मुझे परवाह है, यह एक बड़ा हिस्सा है इसलिए मैं नहीं जा रहा हूं जल्द ही बाहर चलाएं। मेरे आईडी का उपयोग किसी भी तरह से नहीं किया जाता है जो कि इस पर निर्भर करता है कि वे कैसे बनाए जाते हैं और यदि यह केवल तभी होता है जब SQLServer को उत्पादन में पुनरारंभ किया जाता है जो अक्सर (प्रसिद्ध अंतिम शब्द!) नहीं होता ... कम से कम मैं अब मैं चिंतित नहीं हूं, असली उत्पादन तैनाती के लिए 2008 आर 2 पर वापस जा सकता है ... – Jammer

0

यदि आप "चेकप्वाइंट" कमांड प्रत्येक डालने क्वेरी के बाद कॉल करेंगे चलो यह आपकी समस्या का समाधान करेगा।

अधिक जानकारी के लिए कृपया बाहर चेकप्वाइंट एसक्यूएल सर्वर

+0

डीबी में लगभग 300 सम्मिलित प्रश्न हैं। काम नहीं करेगा। एमएस को इस मुद्दे को ठीक करने की जरूरत है। –

संबंधित मुद्दे