سؤال

وأنا جمع البيانات الأولية باستخدام تميز الكلية. * جهات النظر، وفقا للوثائق، و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

وركضت هذا على قاعدة بيانات أخرى، ولقد لاحظت يتم إرجاع بعض NULLs (حتى في حالة INNER JOIN). وذلك لأن بعض الأعمدة هي في VIEWs.

وحاول مضيفا:

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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top