این‌ها تعدادی گزارش‌های سیستمی (system query ) هستند که گاهی خیلی به درد می‌خورن. از اونجایی که این‌ها رو بیشتر برای این می‌نویسم که کسی با search بهشون برسه کمی هم Eng قاطی‌ش می‌کنم. البته این‌ها توی MS Server 2005 اجرا می‌شن. چون خب می‌دونین که جدول‌های سیستمی دیگه به اون شکل توی 2005 وجود ندارن و بیشتر از view و sp های سیستمی استفاده می‌شه.

بعد دیگه اینکه بعضی از این‌ها رو search کردم، ولی متاسفانه آدرسشون رو نداشتم که لینک بدم. خدا من رو بیامرزه با این سرقت علمی. البته به جز این یکی که خیلی مطالب جالبی داره.

http://blog.sqlauthority.com/

اولی: چطور جداولی که ستونی دارن که identity هست رو پیدا کنیم.

Find the tables with identity:

SELECT SCHEMA_NAME(t.schema_id) + '.' + t.name AS SchemaTable, c.name AS ColumnName

FROM sys.tables AS t INNER JOIN

sys.identity_columns AS c ON t.object_id = c.object_id

ORDER BY SchemaTable

بعد با این گزارش می‌شه فهمید کدامیک از این identity دار ها؛ کلید اصلی (primary Key ) هستند

By this query you can find which of these identities are PK:

SELECT N.TABLE_NAME, N.COLUMN_NAME,

i.object_Id

FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS N INNER JOIN

sys.identity_columns AS I

ON N.TABLE_NAME = OBJECT_NAME(I.object_id) AND N.Column_Name = I.name

LEFT OUTER JOIN sys.objects so

ON so.parent_object_id = I.object_id WHERE so.type = 'PK'

دومی: جداول master و detail با اسم جدول، و ستون و اسم رابطه

Find master and detail tables, their names, column names, relation name:

SELECT f.name AS ForeignKey,

OBJECT_NAME(f.parent_object_id) AS TableName,

COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,

OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,

COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName

FROM sys.foreign_keys AS f

INNER JOIN sys.foreign_key_columns AS fc

ON f.object_id = fc.constraint_object_id

سومی: پیدا کردن نوع داده‌‌ی ستون‌ها (در جداول مختلف)

Find data type of fields:

SELECT

OBJECT_name(c.object_id) TableName

,c.name AS ColumnName

,SCHEMA_NAME(t.schema_id) AS SchemaName

,t.name AS TypeName

FROM sys.columns AS c

JOIN sys.types AS t ON c.user_type_id=t.user_type_id

ORDER BY c.object_id

چهارمی: این یه select روی دو تا جدول که توی دو تا پایگاه داده مختلف هستند.

Run a query on two tables which are on two different Databases:

select name2,t2.name

from testname join hrnames3..testname as t2

on testname.name2 = t2.name

پنجمی: فرض کنید یه سری جدول دارین که PKشون از نوع identityست. بعد این فیلدها توی یه جدول دیگه FK هستند. می‌خواین بدونین کجاها FK هستن.

برای اینکه واضح بشه یکم، فرض کنین شما چند جای مختلف شعبه دارین. هر کدوم از شعبه پایگاه داده خودشون رو دارن، و همگی ساختار مشابهی دارن. حالا می‌خواین اطلاعات همه رو یک جا جمع کنین. بعد خب طبیعیِ که یه سری رکوردها PK تکراری می‌خوره بهشون. بعد می‌خواین رنج بدین به PK هاتون. ولی باید جاهایی که PK شده FK هم به روز بشه، بنابراین این گزارش بسی به درد می‌خوره.

Find where PK with identity are FKs:

SELECT OBJECT_NAME(FK.parent_object_id) AS TableName,
COL_NAME(FK.parent_object_id, Y.parent_column_id) AS ColumnName
FROM sys.foreign_key_columns AS FK
INNER JOIN
(SELECT OBJECT_NAME(i.object_id) AS OID, n.COLUMN_NAME AS CName
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS n INNER JOIN
sys.identity_columns AS i ON n.TABLE_NAME = OBJECT_NAME(i.object_id) AND n.COLUMN_NAME = i.name
LEFT OUTER JOIN
sys.objects AS so ON so.parent_object_id = i.object_id
WHERE (so.type = 'PK')) AS TID ON TID.OID = OBJECT_NAME(FK.referenced_object_id)
AND
TID.CName = COL_NAME(FK.referenced_object_id,FK.referenced_column_id)

0 comments: