sinayas
دوشنبه 18 شهریور 1392, 10:48 صبح
سلام
من وقتی از بانک اطلاعاتی اسکریپ تهیه میکنیم رابطه هایی که تو بانک ایجاد کردم در بانک جدید ایجاد نمیشه .
و من مجبورم به صورت دستی رابطه ها رو مجددا تعری کنم .
باید چیکار کنم که تو اسکریپ رابطه ها رو هم داشته باشم تا وقتی تو یه کامپیوتر دیگه اجراش کردم رابطه ها رو داشته باشم .
lastmory
دوشنبه 18 شهریور 1392, 13:53 عصر
با سلام
شما اسکریپتهاتو چه جوری میسازی؟
از این مسیر بساز
اول دیتابیس رو
بعدش جداول رو
روی دیتابیس کلیک راست کن از قسمت Task گزینه GenerateScripts رو انتخاب کن
sinayas
سه شنبه 19 شهریور 1392, 08:13 صبح
دقیقا از همین مسیر میسازم .
ولی رابطه ها رو برام ایجاد نمیکنه ؟!
ممنون میشم بیشتر راهنمایی کنید .
lastmory
سه شنبه 19 شهریور 1392, 14:29 عصر
با سلام مجدد
وقتی میخوای اسکریپت جداولی که انتخاب کردی رو بسازی از قسمت Advanced ، گزینه script Foreign keys رو بزار رو true
sinayas
سه شنبه 19 شهریور 1392, 17:14 عصر
در قسمت Advanced گزینه script Foreign keys رو True ست کردم ولی باز مشکل برقراره !
benyaminrahimi
چهارشنبه 20 شهریور 1392, 19:32 عصر
این اسکریپت قسمتی از پترن بروزرسانی بندست برای گرفتن اسکریپت ریلشنا ---
هم اسکریپت حذف ریلیشن های جاری رو میده و هم اسکریپت ساختنشونو
البته برای sp fn view pk index هم همچین کدایی نوشتم :) (کاملا تست شده )
IF EXISTS (
SELECT *
FROM tempdb.dbo.sysobjects
WHERE id = OBJECT_ID(N'[tempdb].[dbo].[#fker]')
)
DROP TABLE [dbo].[#fker]
CREATE TABLE #fker
(
sc VARCHAR(MAX) NOT NULL
)
DECLARE @schema_name SYSNAME;
DECLARE @table_name SYSNAME;
DECLARE @constraint_name SYSNAME;
DECLARE @constraint_object_id INT;
DECLARE @referenced_object_name SYSNAME;
DECLARE @is_disabled BIT;
DECLARE @is_not_for_replication BIT;
DECLARE @is_not_trusted BIT;
DECLARE @delete_referential_action TINYINT;
DECLARE @update_referential_action TINYINT;
DECLARE @tsql NVARCHAR(4000);
DECLARE @tsql2 NVARCHAR(4000);
DECLARE @fkCol SYSNAME;
DECLARE @pkCol SYSNAME;
DECLARE @col1 BIT;
DECLARE @action CHAR(6);
DECLARE @referenced_schema_name SYSNAME;
DECLARE FKcursor CURSOR
FOR
SELECT OBJECT_SCHEMA_NAME(parent_object_id),
OBJECT_NAME(parent_object_id),
NAME,
OBJECT_NAME(referenced_object_id),
OBJECT_ID,
is_disabled,
is_not_for_replication,
is_not_trusted,
delete_referential_action,
update_referential_action,
OBJECT_SCHEMA_NAME(referenced_object_id)
FROM sys.foreign_keys
ORDER BY
1,
2
;
OPEN FKcursor;
FETCH NEXT FROM FKcursor INTO @schema_name, @table_name, @constraint_name
, @referenced_object_name, @constraint_object_id
, @is_disabled, @is_not_for_replication, @is_not_trusted
, @delete_referential_action, @update_referential_action, @referenced_schema_name;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @TSQL='IF EXISTS( SELECT * FROM information_schema.table_constraints WHERE CONSTRAINT_NAME= '
+''''+QUOTENAME(@constraint_name)+''''
+' and CONSTRAINT_TYPE IN ( '
+''''+'FOREIGN KEY'+''''+','
+''''+'PRIMARY KEY'+''''+','
+''''+'CHECK'+''''+
') ) '
+' ALTER TABLE '
+ QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name)
+ ' DROP CONSTRAINT ' + QUOTENAME(@constraint_name)
+ ' ALTER TABLE '
+ QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name)
+ CASE @is_not_trusted
WHEN 0 THEN ' WITH CHECK '
ELSE ' WITH NOCHECK '
END
+ ' ADD CONSTRAINT ' + QUOTENAME(@constraint_name)
+ ' FOREIGN KEY (';
SET @tsql2 = '';
DECLARE ColumnCursor CURSOR
FOR
SELECT COL_NAME(fk.parent_object_id, fkc.parent_column_id),
COL_NAME(fk.referenced_object_id, fkc.referenced_column_id)
FROM sys.foreign_keys fk
INNER JOIN sys.foreign_key_columns fkc
ON fk.object_id = fkc.constraint_object_id
WHERE fkc.constraint_object_id = @constraint_object_id
ORDER BY
fkc.constraint_column_id
;
OPEN ColumnCursor;
SET @col1 = 1;
FETCH NEXT FROM ColumnCursor INTO @fkCol, @pkCol;
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@col1 = 1)
SET @col1 = 0;
ELSE
BEGIN
SET @tsql = @tsql + ',';
SET @tsql2 = @tsql2 + ',';
END;
SET @tsql = @tsql + QUOTENAME(@fkCol);
SET @tsql2 = @tsql2 + QUOTENAME(@pkCol);
FETCH NEXT FROM ColumnCursor INTO @fkCol, @pkCol;
END;
CLOSE ColumnCursor;
DEALLOCATE ColumnCursor;
SET @tsql = @tsql + ' ) REFERENCES ' + QUOTENAME(@referenced_schema_name) +
'.' + QUOTENAME(@referenced_object_name)
+ ' (' + @tsql2 + ')';
SET @tsql = @tsql
+ ' ON UPDATE ' + CASE @update_referential_action
WHEN 0 THEN 'NO ACTION '
WHEN 1 THEN 'CASCADE '
WHEN 2 THEN 'SET NULL '
ELSE 'SET DEFAULT '
END
+ ' ON DELETE ' + CASE @delete_referential_action
WHEN 0 THEN 'NO ACTION '
WHEN 1 THEN 'CASCADE '
WHEN 2 THEN 'SET NULL '
ELSE 'SET DEFAULT '
END
+ CASE @is_not_for_replication
WHEN 1 THEN ' NOT FOR REPLICATION '
ELSE ''
END
+ ';';
INSERT INTO #fker
(
sc
)
SELECT @tsql
IF @action = 'CREATE'
BEGIN
SET @tsql = 'ALTER TABLE '
+ QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name)
+ CASE @is_disabled
WHEN 0 THEN ' CHECK '
ELSE ' NOCHECK '
END
+ 'CONSTRAINT ' + QUOTENAME(@constraint_name)
+ ';';
SELECT @tsql
END;
FETCH NEXT FROM FKcursor INTO @schema_name, @table_name, @constraint_name
, @referenced_object_name, @constraint_object_id
, @is_disabled, @is_not_for_replication, @is_not_trusted
, @delete_referential_action, @update_referential_action, @referenced_schema_name;
END;
CLOSE FKcursor;
DEALLOCATE FKcursor;
SELECT *
FROM #fker
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.