婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 合并SQL腳本文件的方法分享

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

熱門(mén)標(biāo)簽:蘭州語(yǔ)音外呼系統(tǒng)運(yùn)營(yíng)商 al智能電話機(jī)器人 沒(méi)聽(tīng)見(jiàn)電話機(jī)器人幫你接 數(shù)字匠心電銷(xiāo)機(jī)器人 銀川高頻外呼回?fù)芟到y(tǒng)多少錢(qián) 最新人工智能電銷(xiāo)機(jī)器人 陜西電銷(xiāo)外呼系統(tǒng)好用嗎 成都電話外呼系統(tǒng)一般多少錢(qián) 如何做地圖標(biāo)注圖鋪
概述
--------------------------------------------------------------------------------
在平時(shí)的工作中,我會(huì)經(jīng)常的碰到這樣需要合并SQL腳本的問(wèn)題。如,有很多的SQL腳本文件,需要按照一定的先后順序,再生成一個(gè)合并SQL腳本文件,然后再發(fā)布到用戶(hù)SQL Server服務(wù)器上。
合并SQL腳本文件,最直接的方法就是新建1個(gè)空白的SQL腳本文件,再把需要合并的SQL腳本文件內(nèi)容復(fù)制到新建的SQL文件中。當(dāng)初,我合并腳本的操作方法與剛說(shuō)的有類(lèi)似。我在Microsoft SQL Server Management Studio(MSSMS)新建一個(gè)查詢(xún),再把要合并的SQL腳本文件,一個(gè)一個(gè)的打開(kāi),并復(fù)制內(nèi)容到新建查詢(xún)中,然后生成合并腳本文件。
上面的方法,對(duì)于幾個(gè)SQL腳本文件合并來(lái)說(shuō),似乎沒(méi)什么問(wèn)題。但是,當(dāng)我們要合并的腳本很多,一文件一個(gè)文件的內(nèi)容復(fù)制,是比較繁瑣的事情,要是能有1個(gè)簡(jiǎn)單合并腳本工具就最好不過(guò)了。下面介紹我寫(xiě)的兩個(gè)合并SQL腳本文件的存儲(chǔ)過(guò)程.
第1個(gè)存儲(chǔ)過(guò)程,只要調(diào)用sp_OACreate實(shí)現(xiàn)合并SQL腳本文件。
復(fù)制代碼 代碼如下:

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
/*讀取腳本文件內(nèi)容*/
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+' 合并完成(合計(jì) '+rtrim(@ScriptCount)+' 各腳本文件). */'+Char(13)+Char(10)+ N'Go'+Char(13)+Char(10)
/*寫(xiě)入合并腳本文件*/
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'*********** 讀寫(xiě)文件的時(shí)候發(fā)生錯(cuò)誤 ***********'
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

調(diào)用上面存儲(chǔ)過(guò)程前,需要確認(rèn)啟用 OLE Automation Procedures和xp_cmdshell 選項(xiàng):
復(fù)制代碼 代碼如下:

調(diào)用上面存儲(chǔ)過(guò)程前,需要確認(rèn)啟用 OLE Automation Procedures和xp_cmdshell 選項(xiàng):
復(fù)制代碼 代碼如下:

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

測(cè)試:
復(fù)制代碼 代碼如下:

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個(gè)是CLR存儲(chǔ)過(guò)程,使用C#代碼實(shí)現(xiàn)合并SQL腳本文件。
--------------------------------------------------------------------------------
C#代碼:
復(fù)制代碼 代碼如下:

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"); //記錄生成的合并腳本編號(hào)合并動(dòng)作的開(kāi)始位置
foreach (string strFile in strFiles)
{
if (strFile !=NewFileName)
{
intCount += 1;
SW.WriteLine(@"/* " + strScriptNr +@" ("+intCount+@"): " + strFile + "*/\nGo\n"); //記錄合并哪一個(gè)腳本文件
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 + " 個(gè)文件)===================================*/\nGo\n"); //記錄生成的合并腳本文件個(gè)數(shù)合并動(dòng)作的結(jié)束位置
SW.Close();
SqlContext.Pipe.Send("\n\n【合成后文件】:\n--------------------------------------------\n" + NewFileName);
}
catch (System.Exception e)
{
SqlContext.Pipe.Send("\n在方法SQLScriptMerge內(nèi)發(fā)生錯(cuò)誤: \n\n" + e.ToString());
}
}
}

存儲(chǔ)過(guò)程代碼:
復(fù)制代碼 代碼如下:

Use master
GO
--啟動(dòng)CLR
Exec sp_configure 'clr enable',1
Go
Reconfigure
GO
--先設(shè)置數(shù)據(jù)庫(kù)選項(xiàng)
Alter Database Master Set TRUSTWORTHY On
Go
--存儲(chǔ)過(guò)程
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存儲(chǔ)過(guò)程代碼是在SQL Server 2005 Microsoft Visual Studio 2005下運(yùn)行通過(guò)。

標(biāo)簽:本溪 鹽城 宜春 巴彥淖爾 通化 朔州 邢臺(tái) 遼源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《合并SQL腳本文件的方法分享》,本文關(guān)鍵詞  合并,SQL,腳本,文件,的,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《合并SQL腳本文件的方法分享》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于合并SQL腳本文件的方法分享的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91蜜桃视频在线| 国产成人免费视频| 日韩电影免费在线看| 国产亚洲视频系列| 99re在线精品| 精品在线播放午夜| 日韩专区中文字幕一区二区| 五月天视频一区| 亚洲国产日韩精品| 亚洲激情av在线| 欧美另类一区二区三区| 色综合一区二区三区| 日韩国产高清影视| 亚洲欧美日韩国产手机在线| 91免费版pro下载短视频| 欧美三级视频在线观看| 成人国产精品视频| 亚洲国产精品人人做人人爽| 国产成人啪免费观看软件| 亚洲成人一二三| 亚洲国产精品久久人人爱| 欧美日韩成人一区二区| 欧美日韩一区久久| 麻豆精品久久精品色综合| 欧美性色aⅴ视频一区日韩精品| 亚洲sss视频在线视频| 色噜噜久久综合| 国产麻豆精品一区二区| 国产suv精品一区二区883| 国产一区在线看| 成人看片黄a免费看在线| 丁香婷婷综合激情五月色| 午夜精品久久久久影视| 亚洲色图欧美偷拍| 亚洲精品一区二区在线观看| 亚洲精品在线一区二区| www.欧美.com| 五月婷婷久久丁香| 欧美激情艳妇裸体舞| 91超碰这里只有精品国产| 99热精品一区二区| 国内精品自线一区二区三区视频| 亚洲欧美日韩电影| 国产调教视频一区| 精品国产制服丝袜高跟| 在线欧美日韩精品| 91久久精品一区二区| 国产不卡高清在线观看视频| 久久精品国产999大香线蕉| 一区二区三区四区在线| 亚洲三级在线免费| 亚洲精品免费视频| 亚洲国产精品久久一线不卡| 亚洲国产精品久久人人爱| 91精品欧美久久久久久动漫| 色综合久久中文综合久久牛| 成人app网站| 91免费在线播放| 一本色道久久综合狠狠躁的推荐| www.日韩在线| 91成人在线观看喷潮| 色老汉av一区二区三区| 欧美日韩国产一级片| 精品国产一区二区精华| 成人欧美一区二区三区视频网页| 一区二区三区美女| 国产美女视频91| 91视频精品在这里| 91精品中文字幕一区二区三区| 国产亚洲综合色| 免费观看一级特黄欧美大片| 国内精品免费在线观看| 欧美亚洲动漫另类| 久久综合九色综合欧美就去吻| 亚洲欧洲国产日本综合| 蜜桃一区二区三区在线| k8久久久一区二区三区| 欧美日韩国产经典色站一区二区三区| 宅男噜噜噜66一区二区66| 国产精品蜜臀在线观看| 日韩国产在线一| 91小视频免费观看| 久久久久久亚洲综合影院红桃| 精品欧美黑人一区二区三区| 一区二区三区在线观看动漫| 精久久久久久久久久久| 欧美在线|欧美| 久久精品在这里| 捆绑紧缚一区二区三区视频| 欧美日韩免费观看一区二区三区| 久久嫩草精品久久久精品一| 国产一区二区精品久久91| 久久女同互慰一区二区三区| 日本一道高清亚洲日美韩| 91精品中文字幕一区二区三区| 亚洲国产日韩a在线播放| 欧美午夜理伦三级在线观看| 成人欧美一区二区三区在线播放| 成人一区二区在线观看| 国产另类ts人妖一区二区| 亚洲国产高清aⅴ视频| 国产一区二区三区在线观看精品 | 无码av中文一区二区三区桃花岛| 色婷婷综合久色| 偷拍日韩校园综合在线| 精品国产三级a在线观看| 色欧美乱欧美15图片| 日韩高清不卡一区二区| 中文字幕一区二区在线观看| 91麻豆文化传媒在线观看| 韩日精品视频一区| 视频一区中文字幕国产| 亚洲免费观看高清在线观看| 日韩精品在线一区二区| bt欧美亚洲午夜电影天堂| 日本欧洲一区二区| 午夜精品久久久久| 亚洲三级小视频| 国产精品丝袜91| 中文字幕一区二区三区视频| 欧美成人a视频| 精品裸体舞一区二区三区| 日韩视频不卡中文| 欧美精品一区二区蜜臀亚洲| 欧美成人精品高清在线播放| 欧美一级日韩免费不卡| 精品欧美一区二区在线观看| 日韩欧美专区在线| 亚洲国产精品av| 亚洲欧美日韩中文字幕一区二区三区| 日韩精品中文字幕一区二区三区| 视频一区二区不卡| 亚洲成在人线在线播放| 亚洲永久精品大片| 亚洲高清视频中文字幕| 天天综合网天天综合色| 免费成人在线视频观看| 韩国一区二区三区| 成人福利在线看| 欧美精选在线播放| 久久夜色精品国产欧美乱极品| 日本一区二区三区在线观看| 亚洲精品美腿丝袜| 夜夜揉揉日日人人青青一国产精品| 欧美大片顶级少妇| 国产麻豆视频一区| 亚洲欧美日韩中文播放| 欧美精品丝袜中出| 国产精品一区二区在线观看不卡| 国产精品福利影院| www.爱久久.com| 国内外成人在线| 奇米精品一区二区三区四区| 欧美成人video| 亚洲国产高清不卡| 欧美电影免费观看高清完整版在线| 国产精品嫩草99a| 国产一区 二区| 欧美精品一区二区蜜臀亚洲| 偷拍日韩校园综合在线| 欧美色视频一区| 一区二区三区在线免费| 国产一区二区中文字幕| 国产亚洲成年网址在线观看| 国产精品18久久久久久久久| 欧美一区二区三区四区高清| 久久99精品国产麻豆婷婷洗澡| 日韩欧美国产一区二区在线播放| 欧美激情一区不卡| 亚洲国产综合色| 9l国产精品久久久久麻豆| 国产精品午夜免费| 99久久久免费精品国产一区二区| 日韩欧美一区中文| 国产黑丝在线一区二区三区| 欧美经典一区二区| 在线观看亚洲a| 国产在线精品免费| 一区二区在线观看不卡| 日韩欧美在线一区二区三区| 成人午夜在线视频| 婷婷一区二区三区| 国产日产欧产精品推荐色| 88在线观看91蜜桃国自产| 国模冰冰炮一区二区| 亚洲午夜国产一区99re久久| 久久久久国产精品麻豆| 精品视频123区在线观看| 国产aⅴ综合色| 蜜臀久久99精品久久久画质超高清 | 蜜臀99久久精品久久久久久软件| 成人综合激情网| 亚洲精品福利视频网站| 欧美在线free| 中文字幕久久午夜不卡| 91精品国产综合久久久久| 99riav一区二区三区| 国产成人免费xxxxxxxx| 国产91精品欧美| 国产成人亚洲综合色影视|