ایجاد sp در master به صورت اتوماتیک (وقتی کاربر می خواد نرم افزار رو نصب کنه)
با سلام
من یه sp دارم که برای بازگردانی بک آپ هست و در master هست. که البته فایلشو ذخیره کردم.
حالا این sp چون توی پایگاه نیست ، با attach پایگاه به master اضافه نمیشه.
می خوام اتوماتیک این sp رو در master ایجاد کنم.(حالا با کدنویسی در دلفی با...)
کلاً برای sp هایی که در پایگاه نیستند چه باید کرد؟
نقل قول: ایجاد sp در master به صورت اتوماتیک (وقتی کاربر می خواد نرم افزار رو نصب کنه)
سلام.
مستقیم کوئری رو روی Master ران کنید.
مشکل چیه؟
نقل قول: ایجاد sp در master به صورت اتوماتیک (وقتی کاربر می خواد نرم افزار رو نصب کنه)
نقل قول:
نوشته شده توسط
You-See
سلام.
مستقیم کوئری رو روی Master ران کنید.
مشکل چیه؟
مشکلی توی ران کردن ندارم. مشکل اینجاست که برای اولین بار باید این sp به صورت دستی روی سیستم کاربر run بشه.
من می خوام اتوماتیک این کار رو انجام بدم.مثلاً یه دستور ، پروسیجر یا... که نام و آدرس sp ذخیره شده روی سیستم رو بگیره و اتوماتیک اونو توی master یا... run کنه.
چه روش هایی هست؟ توی sp های آماده موجود در master پروسیجری نیست که این کار رو انجام بده؟ ساده ترین راه چیه؟
تا جایی که فهمیدم کامپوننت UniDAC این قابلیت رو داره. راه ساده تری نیست!؟
نقل قول: ایجاد sp در master به صورت اتوماتیک (وقتی کاربر می خواد نرم افزار رو نصب کنه)
من واقعا متوجه صورت سوال نمی شم.
یک کوئری با ADOQuery بسازید که کانکشن استرینگش روی مستر سیستم مقصده.
محتوای این کوئری می شه چیزی شبیه به این:
create procedure MyProc
@Param1
@Param2
.
.
as
begin
.
.
end
این کوئری رو ران می کنید، اس پی ساخته می شه.
سپس با استفاده از یک ADOStoredProc این اس پی رو ران می کنید.
نقل قول: ایجاد sp در master به صورت اتوماتیک (وقتی کاربر می خواد نرم افزار رو نصب کنه)
نقل قول:
نوشته شده توسط
You-See
من واقعا متوجه صورت سوال نمی شم.
یک کوئری با ADOQuery بسازید که کانکسشن استرینگش روی مستر سیستم مقصده.
محتوای این کوئری می شه چیزی شبیه به این:
create procedure MyProc
@Param1
@Param2
.
.
as
begin
.
.
end
این کوئری رو ران می کنید، اس پی ساخته می شه.
سپس با استفاده از یک ADOStoredProc این اس پی رو ران می کنید.
آهان! گرفتم چی شد. باید دستور ساخت sp رو توی یک کوئری در دلفی نوشت و کوئری رو ران کرد.
من این دستورات ساخت sp رو توی sql نوشتم و فایلش sql ش رو با پسوند .sql روی سیستم ذخیره کردم. برای ران کردنش هم اونو باز می کنم و execute رو میزنم.
این sp من هست. دستور زیر درسته؟
with adoquery1 do
begin
Close;
create PROCEDURE [dbo].[sp_sys_restore](@dbname NVARCHAR(100),@masir NVARCHAR(500) )
AS
BEGIN
DECLARE @r_name NVARCHAR(500)
DECLARE @r_path NVARCHAR(500)
DECLARE @r_x NVARCHAR(1000)
SELECT @r_name=sys.master_files.name ,
@r_path=sys.master_files.physical_name
FROM sys.databases
INNER JOIN sys.master_files
ON sys.databases.database_id = sys.master_files.database_id
WHERE sys.databases.name=@dbname AND sys.master_files.type_desc='ROWS'
SET @r_x=+' ,MOVE '+''''+@r_name+''''+' to '+''''+@r_path+''''
SET @r_x=ISNULL(@r_x,'')
DECLARE @l_name NVARCHAR(500)
DECLARE @l_path NVARCHAR(500)
DECLARE @l_x NVARCHAR(1000)
SELECT @l_name=sys.master_files.name ,
@l_path=sys.master_files.physical_name
FROM sys.databases
INNER JOIN sys.master_files
ON sys.databases.database_id = sys.master_files.database_id
WHERE sys.databases.name=@dbname AND sys.master_files.type_desc='LOG'
SET @l_x=+' ,MOVE '+''''+@l_name+''''+' to '+''''+@l_path+''''
SET @l_x=ISNULL(@l_x,'')
DECLARE @runer NVARCHAR(max)
SET @runer='RESTORE DATABASE ['+@dbname+'] FROM DISK = '+''''+@masir+''''+' WITH FILE = 1'
+@r_x
+@l_x
+', NOUNLOAD, REPLACE, STATS = 10 '
exec ('ALTER DATABASE '+ @dbname +' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ')
EXEC (@runer)
exec ('ALTER DATABASE '+@dbname +' SET MULTI_USER ')
END
ExecSQL;
end
نقل قول: ایجاد sp در master به صورت اتوماتیک (وقتی کاربر می خواد نرم افزار رو نصب کنه)
درستی یا نادرستی اس پی رو باید خودتون تشخیص بدید دیگه.
نیازی به ساخت فایل نیست.
همین کوئری رو در قالب یک کوئری ران کنید ساخته می شه.
نقل قول: ایجاد sp در master به صورت اتوماتیک (وقتی کاربر می خواد نرم افزار رو نصب کنه)
نقل قول:
نوشته شده توسط
You-See
درستی یا نادرستی اس پی رو باید خودتون تشخیص بدید دیگه.
sp درسته و کار میکنه. منظورم ساختار نوشتن adoquery بود.
نقل قول:
نوشته شده توسط
You-See
نیازی به ساخت فایل نیست.. همین کوئری رو در قالب یک کوئری ران کنید ساخته می شه
اجرا کردم. درست شد و جواب داد. ممنون.