اینها تعدادی گزارشهای سیستمی (system query ) هستند که گاهی خیلی به درد میخورن. از اونجایی که اینها رو بیشتر برای این مینویسم که کسی با search بهشون برسه کمی هم Eng قاطیش میکنم. البته اینها توی MS Server 2005 اجرا میشن. چون خب میدونین که جدولهای سیستمی دیگه به اون شکل توی 2005 وجود ندارن و بیشتر از view و sp های سیستمی استفاده میشه.
بعد دیگه اینکه بعضی از اینها رو search کردم، ولی متاسفانه آدرسشون رو نداشتم که لینک بدم. خدا من رو بیامرزه با این سرقت علمی. البته به جز این یکی که خیلی مطالب جالبی داره.
▪ اولی: چطور جداولی که ستونی دارن که 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:
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'
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:
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
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 هم به روز بشه، بنابراین این گزارش بسی به درد میخوره.
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:
Post a Comment