أين seed_value وincrement_value للأعمدة الهوية؟
-
03-07-2019 - |
سؤال
وأنا جمع البيانات الأولية باستخدام تميز الكلية. * جهات النظر، وفقا للوثائق، وsys.identity_columns عرض سيعود القيم البذور وزيادة مثل ذلك.
CREATE TABLE ident_test (
test_id int IDENTITY(1000,10),
other int
)
SELECT name, seed_value, increment_value
FROM sys.identity_columns
WHERE object_id = OBJECT_ID( 'ident_test' )
ولكن، الاستعلام أعلاه بإرجاع فقط عمود واحد. هل لي فقط؟
و(ملاحظة: لقد كان لتغيير هذا السؤال إلى حد ما من إصدار سابق لها)
المحلول
لا ينبغي أن عكس من والانضمام، مثل هذا:
SELECT c.name, i.seed_value, i.increment_value
from sys.identity_columns i
join sys.columns c
ON i.object_id = c.object_id
AND i.column_id = c.column_id
نصائح أخرى
وكنت في عداد المفقودين شرط أين. الاستعلام الخاص بك على نحو فعال قائلا "أعطني كل sys.columns وأية صفوف مطابقة من sys.identity_columns لديك (ولكن تعطيني لاغية إذا كانت هناك أية صفوف مطابقة).
وبإضافة جملة WHERE أدناه عليك تغييره للعودة فقط حيث يتم إرجاع تطابق تام، وهو نفس صلة داخلية في هذه الحالة حقا.
وSELECT c.name، i.seed_value، i.increment_value من عند sys.columns ج LEFT JOIN خارجية sys.identity_columns ط ON i.object_id = c.object_id وi.column_id = c.column_id حيث I.seed_value ليس لاغية
لذلك أعتقد أن البيانات الخاص بك هو الصحيح، لا توجد نتائج لعرضها بالرغم من ذلك.
هل أنت متأكد من أنك تقوم بتشغيل هذا في قاعدة بيانات مع الجداول مع الأعمدة IDENTITY
؟
SELECT c.name, i.seed_value, i.increment_value
FROM sys.columns c
INNER JOIN sys.identity_columns i
ON i.object_id = c.object_id
AND i.column_id = c.column_id
وإرجاع الصفوف بالنسبة لي في قاعدة بيانات إنتاج منتظمة مع عدد قليل من الهويات.
وباستخدام LEFT JOIN
يعود هذه الصفوف، فضلا عن العديد التي لا IDENTITY
وركضت هذا على قاعدة بيانات أخرى، ولقد لاحظت يتم إرجاع بعض NULL
s (حتى في حالة INNER JOIN
). وذلك لأن بعض الأعمدة هي في VIEW
s.
وحاول مضيفا:
INNER JOIN sys.tables t
ON t.object_id = c.object_id
لتصفية فقط إلى أعمدة IDENTITY
الفعلية في الجداول.
والاستعلام بإرجاع ما أتوقع (انظر أدناه). تقوم بإرجاع الصف الفوقية بيانات واحد حول العمود هوية واحدة (test_ID) في الجدول (ident_test)، العمود OTER (الأخرى) لا يوجد لديه البيانات الفوقية في sys.identity_column كما هو لا هوية.
SELECT name, seed_value, increment_value FROM sys.identity_columns WHERE object_id = OBJECT_ID( 'ident_test' ) select name, is_identity, is_nullable from sys.columns WHERE object_id = OBJECT_ID( 'ident_test' )
والذي يعطي
name seed_value increment_value ----------------------------------------- test_id 1000 10 (1 row(s) affected) name is_identity is_nullable ------------------------------------- test_id 1 0 other 0 1 (2 row(s) affected)