PDA

View Full Version : انتقال آبجکت ها از یک بانک به یه بانک دیگه



mehrnoosh_al62
شنبه 05 مرداد 1387, 09:48 صبح
سلام دوستان
من تو برنامم میخوام به سورس view های یک دیتابیس دسترسی داشته باشم. مثلا میخوام یک view رو از یک دیتا بیس به یک دیتا بیس دیگه کپی کنم. میشه بگید چطور میتونم این کار رو انجام بدم. البته این کار رو باید برای StoreProcedure ها هم انجام بدم .
بانکم sqlserver هست. یه همچین پستی رو تو قسمت sqlserver گذاشتم ولی هیچ جوابی نگرفتم.
در واقع میخوام آبجکت های موجود در بانک مخصوصا view و sore procedure ها رو به یک بانک دیگه انتقال بدم.
ممنون میشم کمکم کنید. فقط خواهش میکنم پست منو انتقال ندید جواب نگرفتم...:ناراحت:

mehrnoosh_al62
دوشنبه 07 مرداد 1387, 12:15 عصر
یعنی هیچ راهی وجود نداره؟!!
من میخوام مثل DTS تو برنامم قسمتی باشه که بتونم OBJECT های یک دیتابیس رو به یک دیتابیس دیگه انتقال بدم مخصوصا VIEW ها و SP ها. ممکنه بگید چطوری میشه این کارو کرد؟ خیلی فوریه!!
یا اینکه راهی وجود داره که وقتی از یک دییتابیس BACKUP میگیریم از کلیه OBJECT های اون هم BACKUP گرفته بشه تا موقع RESTOR کردن فایل VIEW, BAK ها و SP ها هم انتقال پیدا کنند؟

mehrnoosh_al62
سه شنبه 08 مرداد 1387, 07:54 صبح
بابا یعنی هیچکس اینجا پیدا نمیشه که جواب سوال منو بدونه؟؟؟؟؟
خیلی فوریه... احتیاج دارم...

mohammed
سه شنبه 08 مرداد 1387, 08:49 صبح
می توانی از گزینه Generate Script استفاده کنی و هر چیزی را که می خواهی انتخاب کنی. اما این تاپیک مال اینجا نیست مال SQL Server است. کوچه بغلی دست چپ از هر کی بپرسی جای تالار را بهت می گویند. :)

mehrnoosh_al62
سه شنبه 08 مرداد 1387, 09:12 صبح
مرسی دوست عزیز
میدونم ولی اگه تو تاپیکم دقت کرده باشی گفتم میخوام از داخل برنامم این کارو انجام بدم در ضمن تو SqlServer جواب نگرفتم...

mehrnoosh_al62
سه شنبه 08 مرداد 1387, 09:17 صبح
دوستای خوبم بازم سلام
اینجا کسی نتونست کمکم کنه ولی خودم تو CodeProject یه برنامه جالب پیدا کردم که خیلی کمک کرد لینکشو میذارم که شاید بدردتون بخوره..
برنامه SqlBuilder که باهاش میتونید از کلیه آبجکت های بانکتون BackUp بگیرید و به SourceCode همه آبجکت ها دسترسی داشته باشید و یه سری قابلیت های دیگه
به نظر من که خیلی جالبه
http://www.codeproject.com/KB/database/SqlBuilder.aspx

Masiha1986
سه شنبه 08 مرداد 1387, 10:44 صبح
با سلام
شما می تونید با چنین دستوری یک View رو از یک DB به DB دیگری منتقل کنید:



USE EraDB --مبدا
DECLARE @ViewDefinition nvarchar(max)
SELECT @ViewDefinition = VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = '' --نام View

SELECT @ViewDefinition

USE AimDB --مفصد
EXEC(@ViewDefinition)

mehrnoosh_al62
سه شنبه 08 مرداد 1387, 11:00 صبح
سلام مرسی از راهنماییت
یه همچین راهی واسه storeprocedure ها هم وجود داره؟

Masiha1986
سه شنبه 08 مرداد 1387, 13:52 عصر
با سلام
با استفاده از این Script می تونید این کار رو برای تمام Object های موجود در DB تون انجام بدید:



USE EraDB --مبدا
DECLARE @Definition nvarchar(max)
SELECT @Definition = definition FROM sys.all_sql_modules INNER JOIN sys.all_objects
ON sys.all_sql_modules.object_id = sys.all_objects.object_id
WHERE sys.all_objects.name = 'YourObjectName' --نام Object

USE AimDB --مفصد
EXEC(@Definition)



*در ضمن پیشنهاد می کنم برای View ها هم از روش بالا (منظورم روش پست قبلی است) استفاده نکنید، چون دوباره که داشتم چک می کردم دیدم که فیلد VIEW_DEFINITION توی INFORMATION_SCHEMA.VIEWS از نوع (4000)nvarchar می باشد، در نتیجه برای View های بزرگ جوابگو نیست.

mehrnoosh_al62
شنبه 12 مرداد 1387, 08:23 صبح
با سلام
با استفاده از این Script می تونید این کار رو برای تمام Object های موجود در DB تون انجام بدید:



USE EraDB --مبدا




DECLARE @Definition nvarchar(max)

SELECT @Definition = definition FROM sys.all_sql_modules INNER JOIN sys.all_objects
ON sys.all_sql_modules.object_id = sys.all_objects.object_id
WHERE sys.all_objects.name = 'YourObjectName' --نام Object


USE AimDB --مفصد
EXEC(@Definition)







*در ضمن پیشنهاد می کنم برای View ها هم از روش بالا (منظورم روش پست قبلی است) استفاده نکنید، چون دوباره که داشتم چک می کردم دیدم که فیلد VIEW_DEFINITION توی INFORMATION_SCHEMA.VIEWS از نوع (4000)nvarchar می باشد، در نتیجه برای View های بزرگ جوابگو نیست.







سلام دوست عزیز
وقتی کد بالا رو اجرا میکنم خطای زیر رو میده :


Server: Msg 208, Level 16, State 1, Line 3
Invalid object name 'sys.all_sql_modules'.
Server: Msg 208, Level 16, State 1, Line 3
Invalid object name 'sys.all_objects'.


میشه بگید چرا؟
من از SQLSERVER2000 استفاده میکنم...

mehrnoosh_al62
شنبه 12 مرداد 1387, 09:38 صبح
اگه بخوام این کار رو تو sqlserver2000 انجام بدم باید چیکار کنم؟

Masiha1986
شنبه 12 مرداد 1387, 09:56 صبح
با سلام
از این Script هم می تونی استفاده کنی:



USE EraDB --مبدا

DECLARE @Definition nvarchar(max)
SELECT @Definition = ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_NAME = 'YourObjectName' --نام Object

USE AimDB --مقصد
EXEC(@Definition)


*در ضمن لازم به ذکره که از اون جایی که INFORMATION_SCHEMA.ROUTINES فقط لیست Stored Procedures ها و Function ها رو بر می گردونه، در نتیجه این روش فقط برای Stored Procedures ها و Function ها جواب میده.

mehrnoosh_al62
چهارشنبه 16 مرداد 1387, 12:10 عصر
سلام
دوست عزیزم از راهنماییتون واقعا ممنونم خیلی بهم کمک کرد
اما این کد یه ایرادی که داره برای StoreProcedure های بزرگتر از Nvarchar(4000) ارور میده. راهی وجود داره که بتونم sp های بزرگ رو هم انتقال بدم..؟

mehrnoosh_al62
پنج شنبه 17 مرداد 1387, 08:02 صبح
یعنی برای sp های بزرگتر از 4000 راهی وجود نداره؟

mehrnoosh_al62
یک شنبه 20 مرداد 1387, 11:10 صبح
سلام دوستان
خودم یه راه برای به آنتقال آبجکت های بزگتر از 4000 پیدا کردم کدشو میذارم امیدوارم به دردتون بخوره
کد زیرsp هایی که بزرگتر از 4000 char هستند رو در چند سطر نشون میده:

select su.name, so.name, sc.text
from sysobjects so, syscomments sc, sysusers su
where xtype='p' and so.id=sc.id and so.uid=su.uid
order by su.name, so.name, sc.colid

danial82
دوشنبه 08 آذر 1389, 09:36 صبح
چجوری میشه یک script رو از درون برنامه اجرا کرد؟
مثلا اگه بخوام script زیر رو از درون یک textbox قرار بدم و از درون برنامه بر روی بانک اجرا کنم


IF EXISTS
(
SELECT * FROM dbo.sysobjects
WHERE id = object_id ( N'[dbo].[Local]' )
AND objectproperty ( id , N'IsUserTable' ) = 1
)
DROP TABLE [dbo].[Local]
GO

CREATE TABLE [dbo].[Local]
(
[Local_id] [int] IDENTITY ( 1 , 1 ) NOT NULL ,
[Local_Name] [nvarchar] ( 500 ) COLLATE Arabic_CI_AS NOT NULL
)
ON [PRIMARY]
GO