ورود

View Full Version : اسکریپنی جهت تقییر تمام ریلیشن های پایگاه داده



arman_Delta2002
یک شنبه 02 خرداد 1400, 17:01 عصر
با سلام من میخوام کل ریلیشن هایی که در پایگاه داده هست پروپرتی Enforce For Replication اون رو به No تقییر بدم یک مقدار اسکریپ نویسی پشرفته ام ضعیفه خواستم از اساتید کمک بگیرم برای این کار
153332
خوب تمام لیلشن ها در زیر پوشه View و زیر پوشه System View داخل ویو sys.foreign_key هست حالا یه لوپ روی اون ها بخوره و کل این ریلیشن ها سطون is_not_for_replication مقدار True بگیره
یا روش دیگه ای هست بگید استفاده کنیم منون میشم.
153333

این هم کد یک ریلیشن Enforce For Replication اون رو به No کینم حالا با کمک اون وییو بخوایم کل ریلیشن های موجود در ویو فوق رو بشه روش لوپ زد و این کد رو اجرا کنه تا همشون No بشه


ALTER TABLE [dbo].[Permission] WITH NOCHECK ADD CONSTRAINT [FK_Permission_AccessCode_AccessCodeID] FOREIGN KEY([AccessCodeID])
REFERENCES [dbo].[AccessCode] ([ID])
NOT FOR REPLICATION

arman_Delta2002
دوشنبه 03 خرداد 1400, 15:09 عصر
این اسکریپت برام کد مد نظر ام رو میسازه ولی روی ریلیشن ها انجام نمیشه باز هم yes هست فکر کنم باید اکسیوت بشه


USE Test1;
GO
SELECT
Drop_FK = 'ALTER TABLE [' + FK.FKTableSchema +
'].[' + FK.FKTableName + '] DROP CONSTRAINT [' + FK.FKName + ']; ',
Add_FK_NFR = 'ALTER TABLE [' + FK.FKTableSchema +
'].[' + FK.FKTableName +
'] WITH CHECK ADD CONSTRAINT [' + FK.FKName +
'] FOREIGN KEY([' + FK.FKTableColumn +
']) REFERENCES [' + schema_name(sys.objects.schema_id) +
'].[' + sys.objects.[name] + ']([' + sys.columns.[name] +
']) NOT FOR REPLICATION; '
FROM sys.objects
INNER JOIN sys.columns
ON (sys.columns.[object_id] = sys.objects.[object_id])
INNER JOIN (
SELECT
sys.foreign_keys.[name] AS FKName,
schema_name(sys.objects.schema_id) AS FKTableSchema,
sys.objects.[name] AS FKTableName,
sys.columns.[name] AS FKTableColumn,
sys.foreign_keys.referenced_object_id AS referenced_object_id,
sys.foreign_key_columns.referenced_column_id AS referenced_column_id
FROM sys.foreign_keys
INNER JOIN sys.foreign_key_columns
ON (sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.[object_id])
INNER JOIN sys.objects
ON (sys.objects.[object_id] = sys.foreign_keys.parent_object_id)
INNER JOIN sys.columns
ON (sys.columns.[object_id] = sys.objects.[object_id])
AND (sys.columns.column_id = sys.foreign_key_columns.parent_column_id)
) FK
ON (FK.referenced_object_id = sys.objects.[object_id])
AND (FK.referenced_column_id = sys.columns.column_id)
WHERE (sys.objects.[type] = 'U')
AND (sys.objects.is_ms_shipped = 0)
AND (sys.objects.[name] NOT IN ('sysdiagrams'))