كيف يمكنني تحديد ما إذا كان العمود في المفتاح الأساسي من الجدول ؟ (SQL Server)

StackOverflow https://stackoverflow.com/questions/222217

سؤال

أنا حاليا باستخدام...

select Table_Name, Column_name, data_type, is_Nullable
from information_Schema.Columns

...لتحديد المعلومات حول الأعمدة في قاعدة البيانات لأغراض توليد DataAccess طبقة.

من أين يمكنني الحصول على معلومات حول إذا كانت هذه الأعمدة المشاركين في المفتاح الأساسي من الجدول ؟

هل كانت مفيدة؟

المحلول

هنا هو طريقة واحدة (استبدال 'keycol' مع اسم العمود كنت تبحث عن ل):

SELECT  K.TABLE_NAME ,
    K.COLUMN_NAME ,
    K.CONSTRAINT_NAME
FROM    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
        JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K ON C.TABLE_NAME = K.TABLE_NAME
                                                         AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG
                                                         AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA
                                                         AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
WHERE   C.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND K.COLUMN_NAME = 'keycol';

نصائح أخرى

وبالمثل التالية سوف تعطيك معلومات عن جميع الجداول و المفاتيح بدلا من المعلومات حول الأعمدة المحددة.هذه الطريقة تأكد من أن لديك كافة الأعمدة من الاهتمام و المشاركة في.من أجل أن نرى جميع مفاتيح (الابتدائي, الخارجية, فريدة من نوعها) ، تعليق على جملة WHERE.

SELECT K.TABLE_NAME, C.CONSTRAINT_TYPE, K.COLUMN_NAME, K.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K
ON C.TABLE_NAME = K.TABLE_NAME
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY K.TABLE_NAME, C.CONSTRAINT_TYPE, K.CONSTRAINT_NAME

للحاجة الخاصة بك كاملة الخارجي الانضمام مع INFORMATION_SCHEMA.أعمدة INFORMATION_SCHEMA.KEY_COLUMN_USAGE.في عبارة select ، إضافة CONSTRAINT_NAME عمود من INFORMATION_SCHEMA.KEY_COLUMN_USAGE التي سوف تعطيك فارغة أو keyname.

select C.Table_Name, C.Column_name, data_type, is_Nullable, U.CONSTRAINT_NAME
from information_Schema.Columns C FULL OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U ON C.COLUMN_NAME = U.COLUMN_NAME
WHERE C.TABLE_NAME=@TABLENAME

هذا الاستعلام بإرجاع العمود هو المفتاح الأساسي.

SELECT  col.COLUMN_NAME ,
        col.DATA_TYPE ,
        col.CHARACTER_MAXIMUM_LENGTH ln ,
        CAST(ISNULL(j.is_primary, 0) AS BIT) is_primary
FROM    INFORMATION_SCHEMA.COLUMNS col
        LEFT JOIN ( SELECT  K.TABLE_NAME ,
                            K.COLUMN_NAME ,
                            CASE WHEN K.CONSTRAINT_NAME IS NULL THEN 0
                                 WHEN K.CONSTRAINT_NAME IS NOT NULL THEN 1
                            END is_primary
                    FROM    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
                            JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K ON C.TABLE_NAME = K.TABLE_NAME
                                                              AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG
                                                              AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA
                                                              AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
                    WHERE   C.CONSTRAINT_TYPE = 'PRIMARY KEY'
                            AND C.TABLE_NAME = 'tablename'
                  ) j ON col.COLUMN_NAME = j.COLUMN_NAME
WHERE   col.TABLE_NAME = 'tablename'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top