نوشته شده توسط
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