欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 合并SQL腳本文件的方法分享

合并SQL腳本文件的方法分享

熱門標簽:蘭州語音外呼系統運營商 al智能電話機器人 沒聽見電話機器人幫你接 數字匠心電銷機器人 銀川高頻外呼回撥系統多少錢 最新人工智能電銷機器人 陜西電銷外呼系統好用嗎 成都電話外呼系統一般多少錢 如何做地圖標注圖鋪
概述
--------------------------------------------------------------------------------
在平時的工作中,我會經常的碰到這樣需要合并SQL腳本的問題。如,有很多的SQL腳本文件,需要按照一定的先后順序,再生成一個合并SQL腳本文件,然后再發布到用戶SQL Server服務器上。
合并SQL腳本文件,最直接的方法就是新建1個空白的SQL腳本文件,再把需要合并的SQL腳本文件內容復制到新建的SQL文件中。當初,我合并腳本的操作方法與剛說的有類似。我在Microsoft SQL Server Management Studio(MSSMS)新建一個查詢,再把要合并的SQL腳本文件,一個一個的打開,并復制內容到新建查詢中,然后生成合并腳本文件。
上面的方法,對于幾個SQL腳本文件合并來說,似乎沒什么問題。但是,當我們要合并的腳本很多,一文件一個文件的內容復制,是比較繁瑣的事情,要是能有1個簡單合并腳本工具就最好不過了。下面介紹我寫的兩個合并SQL腳本文件的存儲過程.
第1個存儲過程,只要調用sp_OACreate實現合并SQL腳本文件。
復制代碼 代碼如下:

use master
Go
if object_id('sp_ScriptMerge') Is Not Null
Drop proc sp_ScriptMerge
Go
Create Proc sp_ScriptMerge
(
@Path nvarchar(1024),
@FilesList nvarchar(max)= null,
@NewFileName nvarchar(1024)=null
)
As
/*合并SQL腳本文件(SQL)V1.0 Andy 2011-9-1*/
Declare
@ScriptNr nchar(21),
@subdirectoryStr nvarchar(512),
@Dir nvarchar(1024),
@ScriptCount int
Declare @subdirectoryTB Table (subdirectory nvarchar(512),depth smallint,[file] smallint)
Declare @tmp table(row smallint identity primary key,fileName nvarchar(512))
Set Nocount on
if right(@Path,1)>'\' Set @Path=@Path+''
If Isnull(@NewFileName,'')='' Set @NewFileName=N'合并腳本-'+Convert(nvarchar(8),getdate(),112)
if lower(right(@NewFileName,4))>'.sql' Set @NewFileName=@NewFileName+'.sql'
Set @NewFileName=@Path+@NewFileName
Set @ScriptNr='Nr: '+Replace(replace(Replace(replace(convert(nvarchar(23),getdate(),121),'-',''),':',''),' ',''),'.','')
Set @ScriptCount=0
/*讀取腳本文件內容*/
if @FilesList >''
Begin
Set @FilesList='Select N'''+replace(@FilesList,',',''' Union All Select N''')+''''
Insert into @tmp([fileName]) Exec(@FilesList)
End
if object_id('Tempdb..#') Is Not Null Drop Table #
Create table #(row int identity(1,1) Primary key,text nvarchar(max))
Insert into @subdirectoryTB Exec xp_dirtree @Path,1,1
Declare cur_file cursor for
Select a.subdirectory
From @subdirectoryTB As a
left Join @tmp As b ON b.fileName=a.subdirectory
Where a.[file]=1 And a.subdirectory like '%.sql'
And (b.fileName=a.subdirectory Or Not Exists(Select 1 From @tmp))
Order By isnull(b.row,0),a.subdirectory
Open cur_file
fetch next From cur_file into @subdirectoryStr
While @@FETCH_STATUS = 0
Begin
Set @ScriptCount=@ScriptCount+1
Insert into #(text) Select +Char(13)+Char(10)+ N'Go'+Char(13)+Char(10)+ N'/* '+@ScriptNr+' ('+rtrim(@ScriptCount)+'): '+@subdirectoryStr+' */'+Char(13)+Char(10)+ N'Go'+Char(13)+Char(10)
Set @Dir='Type '+@Path+'"'+@subdirectoryStr+'"'
Insert into #(text)
Exec sys.xp_cmdshell @Dir
fetch next From cur_file into @subdirectoryStr
End
Close cur_file
Deallocate cur_file
if @ScriptCount >0 Insert into #(text) Select +Char(13)+Char(10)+ N'Go'+Char(13)+Char(10)+ N'/* '+@ScriptNr+' 合并完成(合計 '+rtrim(@ScriptCount)+' 各腳本文件). */'+Char(13)+Char(10)+ N'Go'+Char(13)+Char(10)
/*寫入合并腳本文件*/
if @ScriptCount>0
Begin
Declare @object int,
@FileID int,
@hr int,
@src varchar(255),
@desc varchar(255),
@row int,
@text nvarchar(max)
Exec @hr=sp_OACreate 'Scripting.FileSystemObject',@object output
If @hr > 0 Goto File_ErrorHandler
Exec @hr = sp_OAMethod @object,'CreateTextFile',@FileID OUTPUT, @NewFileName
If @hr > 0 Goto File_ErrorHandler
Set @row=1
While Exists(Select 1 From # Where row=@row)
Begin
Set @text=(Select text From # Where row=@row)
Exec @hr = sp_OAMethod @FileID, 'WriteLine', NULL, @text
Set @row=@row +1
End
Goto File_Done
File_ErrorHandler:
Print N'*********** 讀寫文件的時候發生錯誤 ***********'
Exec @hr=sp_OAGetErrorInfo @object, @src OUT, @desc OUT
Select convert(varbinary(4),@hr) As hr, @src As Source, @desc As Description
File_Done:
Exec @hr = sp_OADestroy @FileID
Exec @hr = sp_OADestroy @object
Print N'*********** 合并腳本完成 ***********'
Print N'合并后腳本文件: '+@NewFileName
End
Go

調用上面存儲過程前,需要確認啟用 OLE Automation Procedures和xp_cmdshell 選項:
復制代碼 代碼如下:

調用上面存儲過程前,需要確認啟用 OLE Automation Procedures和xp_cmdshell 選項:
復制代碼 代碼如下:

Exec sys.sp_configure @configname = 'show advanced options',@configvalue = 1
reconfigure
go
Exec sys.sp_configure @configname = 'xp_cmdshell',@configvalue = 1
reconfigure
Go
Exec sys.sp_configure @configname = 'Ole Automation Procedures',@configvalue = 1
reconfigure
Go

測試:
復制代碼 代碼如下:

use master
GO
Exec master.dbo.sp_ScriptMerge
@Path = 'C:\Users\Administrator\Desktop\temp', -- nvarchar(1024)
@FilesList = '', -- nvarchar(max)
@NewFileName = '合并腳本20110905.sql' -- nvarchar(1024)

*********** 合并腳本完成 ***********合并后腳本文件: C:\Users\Administrator\Desktop\temp\合并腳本20110905.sql第2個是CLR存儲過程,使用C#代碼實現合并SQL腳本文件。
--------------------------------------------------------------------------------
C#代碼:
復制代碼 代碼如下:

using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.IO;
using System.Text;
public class clScriptMerge
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SQLScriptMerge(string Path, string FilesList, string NewFileName)
{
try
{
string[] strFiles ;
FileInfo[] myFileInfo = (new DirectoryInfo(Path)).GetFiles("*.sql");
string strScriptNr = @"Nr" + DateTime.Now.ToString("yyyyMMddHHmmssFFF");
int intCount=0;
if (NewFileName == null || NewFileName=="")
{
NewFileName = "合并腳本" + DateTime.Now.ToString("yyyyMMdd") + ".sql";
}
SqlContext.Pipe.Send(NewFileName.ToString()); //打印已合并的SQL文件名
// 1.獲得SQL腳本列表
if (FilesList != "")
{
strFiles = FilesList.Split(','); //篩分SQL腳本文件名列表,以","分隔
}
else
{
strFiles = new string[myFileInfo.Length];
for (int i = 0; i myFileInfo.Length; i++)
{
strFiles[i] = myFileInfo[i].Name;
}
}
// 2.合并腳本
SqlContext.Pipe.Send("【SQL腳本文件列表】:\n--------------------------------------------");
StreamWriter SW = new StreamWriter(Path + @"\" + NewFileName, true, Encoding.Unicode); //使用Unicode編碼
SW.WriteLine(@"Go\n/*============ " + strScriptNr + "====Start===================================*/\nGo\n"); //記錄生成的合并腳本編號合并動作的開始位置
foreach (string strFile in strFiles)
{
if (strFile !=NewFileName)
{
intCount += 1;
SW.WriteLine(@"/* " + strScriptNr +@" ("+intCount+@"): " + strFile + "*/\nGo\n"); //記錄合并哪一個腳本文件
using (StreamReader SR = new StreamReader(Path + @"\" + strFile, Encoding.Default))
{
string line;
while ((line = SR.ReadLine()) != null)
{
SW.WriteLine(line);
}
SR.Close();
}
SqlContext.Pipe.Send(strFile.ToString()); //打印已合并的SQL文件名
}
}
SW.WriteLine(@"/*============ " + strScriptNr + "====End (一共 " + intCount + " 個文件)===================================*/\nGo\n"); //記錄生成的合并腳本文件個數合并動作的結束位置
SW.Close();
SqlContext.Pipe.Send("\n\n【合成后文件】:\n--------------------------------------------\n" + NewFileName);
}
catch (System.Exception e)
{
SqlContext.Pipe.Send("\n在方法SQLScriptMerge內發生錯誤: \n\n" + e.ToString());
}
}
}

存儲過程代碼:
復制代碼 代碼如下:

Use master
GO
--啟動CLR
Exec sp_configure 'clr enable',1
Go
Reconfigure
GO
--先設置數據庫選項
Alter Database Master Set TRUSTWORTHY On
Go
--存儲過程
If object_id('sp_ScriptMerge2') Is Not Null
Drop Proc sp_ScriptMerge2
Go
If Exists(Select 1 From sys.assemblies Where Name=N'ScriptMerge')
Drop Assembly ScriptMerge
Go
Create Assembly ScriptMerge
From 'E:\Test\Objects\ISTest\ScriptMerge\ScriptMerge\bin\Debug\ScriptMerge.dll'
create proc sp_ScriptMerge2
(
@Path nvarchar(1024),
@FilesList nvarchar(max),
@NewFileName nvarchar(1024)
)
As External Name ScriptMerge.clScriptMerge.SQLScriptMerge
Go

以上的CLR存儲過程代碼是在SQL Server 2005 Microsoft Visual Studio 2005下運行通過。

標簽:本溪 鹽城 宜春 巴彥淖爾 通化 朔州 邢臺 遼源

巨人網絡通訊聲明:本文標題《合并SQL腳本文件的方法分享》,本文關鍵詞  合并,SQL,腳本,文件,的,方法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《合并SQL腳本文件的方法分享》相關的同類信息!
  • 本頁收集關于合并SQL腳本文件的方法分享的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    国产大屁股喷水视频在线观看| 精品99一区二区| 亚洲欧美日韩在线不卡| 国产成人免费视频网站高清观看视频| 日韩在线免费观看av| 日韩一卡二卡三卡四卡| 日韩有码一区二区三区| 亚洲欧美日韩偷拍| 538prom精品视频线放| 午夜精品视频在线观看| 中文字幕天堂网| 日韩一区二区视频在线观看| 日韩电影在线免费| 午夜一区二区三区免费| 日韩一区二区三区免费看| 天天av天天翘天天综合网色鬼国产 | 一本在线高清不卡dvd| 中文字幕在线免费不卡| 成人h精品动漫一区二区三区| 青草影院在线观看| 亚洲精品日产精品乱码不卡| 91蜜桃传媒精品久久久一区二区| 在线观看不卡视频| 香蕉影视欧美成人| 一级特级黄色片| 精品国产乱码久久久久久浪潮| 精品一区二区综合| 顶级黑人搡bbw搡bbbb搡| 综合网在线视频| 精品人妻无码中文字幕18禁| 欧美一区二区三区在线看| 麻豆精品一区二区三区| 中国美女黄色一级片| 一区二区中文字幕在线| www日本在线观看| 日韩亚洲欧美一区二区三区| 韩国v欧美v日本v亚洲v| 欧洲猛交xxxx乱大交3| 亚洲午夜在线视频| 熟女少妇一区二区三区| 中文字幕高清一区| 美女被爆操网站| 精品少妇一区二区三区在线视频| 国产乱子轮精品视频| 杨钰莹一级淫片aaaaaa播放| 亚洲国产精品天堂| 色一情一交一乱一区二区三区| 欧美国产日产图区| 亚洲AV无码久久精品国产一区| 欧美一区二区美女| 国产a视频精品免费观看| 欧美在线视频你懂得| 免费观看91视频大全| 久久免费看少妇高潮v片特黄| 亚洲一级不卡视频| 极品尤物一区二区| 亚洲综合激情小说| 99久久99久久精品免费| 亚洲码国产岛国毛片在线| 久久久无码人妻精品一区| 国产精品久久久久久妇女6080| 波多野结衣加勒比| 欧美国产精品专区| 这里只有精品在线观看视频| 亚洲国产成人一区二区三区| 久久久久久久穴| 中文字幕欧美激情| 日韩www视频| 最新高清无码专区| 少妇久久久久久久久久| 亚洲狠狠丁香婷婷综合久久久| 亚洲精品91在线| 亚洲国产另类av| 日韩欧美123区| 欧美视频你懂的| 韩国精品免费视频| 777奇米成人网| aaa欧美日韩| 久久综合国产精品| 中文字幕一区二区三区乱码不卡| 中文字幕欧美国产| 中文字幕一区二区三区人妻电影| 亚洲精品成人a在线观看| 天堂av网手机版| 日韩精品电影在线| 欧美亚洲尤物久久| 丁香另类激情小说| 精品成人一区二区| 艳妇乳肉豪妇荡乳xxx| 亚洲欧美激情在线| 国产精品成人69xxx免费视频| 免费在线观看精品| 欧美日韩精品综合在线| 国产精品一级片| 欧美成人精品高清在线播放| 少妇熟女视频一区二区三区| 国产精品第13页| 黄色一级片一级片| 麻豆精品新av中文字幕| 欧美日韩免费观看一区三区| a美女胸又www黄视频久久| 久久九九99视频| www.久久国产| 青青草97国产精品免费观看 | 国内精品伊人久久久久av影院| 欧美高清精品3d| 伦伦影院午夜理论片| 亚洲视频在线一区观看| 99鲁鲁精品一区二区三区| 国产一区二区不卡老阿姨| 精品国产伦理网| 欧美老熟妇乱大交xxxxx| 午夜精品爽啪视频| 欧美理论电影在线| 一二三区视频在线观看| 真实国产乱子伦对白在线| 国产成人av电影| 国产精品全国免费观看高清| 欧美另类69xxxx| 国内不卡的二区三区中文字幕| xfplay精品久久| 国产一二三四五区| 久久av中文字幕片| 精品欧美乱码久久久久久1区2区| 在线免费观看黄色小视频| 麻豆久久久久久久| 精品福利一区二区三区| 国产又粗又猛又爽又黄av| 精品一区二区三区免费播放| 久久综合九色综合欧美亚洲| 夫妇交换中文字幕| 国产精品亚洲а∨天堂免在线| 国产色产综合产在线视频| 午夜黄色福利视频| 国产白丝网站精品污在线入口| 国产精品午夜电影| 亚洲一级免费毛片| 91麻豆国产香蕉久久精品| 亚洲一区二区欧美| 3d动漫精品啪啪| 能免费看av的网站| 国产一区二区免费视频| 国产精品亲子伦对白| 色婷婷av一区二区三区软件| 18深夜在线观看免费视频| 亚洲.国产.中文慕字在线| 日韩免费观看高清完整版在线观看| 久久精品成人av| 国产精品一区一区三区| 亚洲欧美一区二区视频| 欧美揉bbbbb揉bbbbb| 国产福利在线观看视频| 久久99国产乱子伦精品免费| 亚洲国产精品传媒在线观看| 在线中文字幕一区二区| 伊人网综合视频| 精品在线播放午夜| 国产精品二区一区二区aⅴ污介绍| 91久久久免费一区二区| 800av在线播放| 国产综合一区二区| 亚洲少妇最新在线视频| 91精品在线免费| 黄色三级生活片| 91色在线porny| 日韩电影在线观看一区| 欧美韩国日本综合| 精品视频资源站| 国产av自拍一区| 国产69精品久久久久毛片| 亚洲一区二区三区四区的| 欧美xxxxx牲另类人与| 蜜臀av午夜精品久久| 91人人澡人人爽| 国产在线视频不卡二| 亚洲欧美日韩国产综合在线| 日韩一区二区三区四区| 污软件在线观看| 国产chinese中国hdxxxx| 国产黄人亚洲片| 亚洲成人精品影院| 国产欧美日韩精品一区| 欧美喷潮久久久xxxxx| 91av手机在线| 丰满岳乱妇一区二区| 国产传媒欧美日韩成人| 午夜免费久久看| 国产精品久久久久影视| 欧美一区二区美女| 一区视频免费观看| 日本激情小视频| 国产精品一级无码| 国产乱码精品一区二区三区忘忧草 | 欧美v亚洲v综合ⅴ国产v| 一本大道久久a久久综合| 久久美女免费视频| 色悠悠在线视频| 成人av在线一区二区三区| 六月丁香综合在线视频| 亚洲小说欧美激情另类|