亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版

2024-08-31 01:03:35
字體:
供稿:網(wǎng)友
這篇文章主要介紹了將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版的相關(guān)資料,需要的朋友可以參考下
 

有時候,我們需要將某個表里的數(shù)據(jù)全部或者根據(jù)查詢條件導(dǎo)出來,遷移到另一個相同結(jié)構(gòu)的庫中

目前SQL Server里面是沒有相關(guān)的工具根據(jù)查詢條件來生成INSERT語句的,只有借助第三方工具(third party tools)

這種腳本網(wǎng)上也有很多,但是網(wǎng)上的腳本還是欠缺一些規(guī)范和功能,例如:我只想導(dǎo)出特定查詢條件的數(shù)據(jù),網(wǎng)上的腳本都是導(dǎo)出全表數(shù)據(jù)

如果表很大,對性能會有很大影響

這里有一個存儲過程(適用于SQLServer2005 或以上版本)

-- Author: <樺仔>-- Blog: <http://www.cnblogs.com/lyhabc/>-- Create date: <//>-- Description: <根據(jù)查詢條件導(dǎo)出表數(shù)據(jù)的insert腳本>-- =============================================CREATE PROCEDURE InsertGenerator(@tableName NVARCHAR(MAX),@whereClause NVARCHAR(MAX))AS --Then it includes a cursor to fetch column specific information (column name and the data type thereof) --from information_schema.columns pseudo entity and loop through for building the INSERT and VALUES clauses --of an INSERT DML statement.DECLARE @string NVARCHAR(MAX) --for storing the first half of INSERT statementDECLARE @stringData NVARCHAR(MAX) --for storing the data (VALUES) related statementDECLARE @dataType NVARCHAR(MAX) --data types returned for respective columnsDECLARE @schemaName NVARCHAR(MAX) --schema name returned from sys.schemasDECLARE @schemaNameCount int--shema countDECLARE @QueryString NVARCHAR(MAX) -- provide for the whole query, set @QueryString=' '--如果有多個schema,選擇其中一個schemaSELECT @schemaNameCount=COUNT(*)FROM sys.tables tINNER JOIN sys.schemas s ON t.schema_id = s.schema_idWHERE t.name = @tableNameWHILE(@schemaNameCount>)BEGIN--如果有多個schema,依次指定select @schemaName = name from (SELECT ROW_NUMBER() over(order by s.schema_id) RowID,s.nameFROM sys.tables tINNER JOIN sys.schemas s ON t.schema_id = s.schema_idWHERE t.name = @tableName) as vwhere RowID=@schemaNameCount--Declare a cursor to retrieve column specific information --for the specified tableDECLARE cursCol CURSOR FAST_FORWARDFORSELECT column_name ,data_typeFROM information_schema.columnsWHERE table_name = @tableNameAND table_schema = @schemaNameOPEN cursColSET @string = 'INSERT INTO [' + @schemaName + '].[' + @tableName + ']('SET @stringData = ''DECLARE @colName NVARCHAR()FETCH NEXT FROM cursCol INTO @colName, @dataTypePRINT @schemaNamePRINT @colNameIF @@fetch_status <> BEGINPRINT 'Table ' + @tableName + ' not found, processing skipped.'CLOSE curscolDEALLOCATE curscolRETURNENDWHILE @@FETCH_STATUS = BEGINIF @dataType IN ( 'varchar', 'char', 'nchar', 'nvarchar' )BEGINSET @stringData = @stringData + '''''''''+isnull(' + @colName + ','''')+'''''',''+'ENDELSEIF @dataType IN ( 'text', 'ntext' ) --if the datatype --is text or something else BEGINSET @stringData = @stringData + '''''''''+isnull(cast(' + @colName + ' as nvarchar(max)),'''')+'''''',''+'ENDELSEIF @dataType = 'money' --because money doesn't get converted --from varchar implicitlyBEGINSET @stringData = @stringData+ '''convert(money,''''''+isnull(cast(' + @colName+ ' as nvarchar(max)),''.'')+''''''),''+'ENDELSEIF @dataType = 'datetime'BEGINSET @stringData = @stringData+ '''convert(datetime,''''''+isnull(cast(' + @colName + ' as nvarchar(max)),'''')+''''''),''+'ENDELSEIF @dataType = 'image'BEGINSET @stringData = @stringData + '''''''''+isnull(cast(convert(varbinary,' + @colName + ') as varchar()),'''')+'''''',''+'ENDELSE --presuming the data type is int,bit,numeric,decimal BEGINSET @stringData = @stringData + '''''''''+isnull(cast(' + @colName + ' as nvarchar(max)),'''')+'''''',''+'ENDSET @string = @string + '[' + @colName + ']' + ','FETCH NEXT FROM cursCol INTO @colName, @dataTypeEND--After both of the clauses are built, the VALUES clause contains a trailing comma which needs to be replaced with a single quote. The prefixed clause will only face removal of the trailing comma.DECLARE @Query NVARCHAR(MAX) -- provide for the whole query, -- you may increase the sizePRINT @whereClauseIF ( @whereClause IS NOT NULLAND @whereClause <> '')BEGIN SET @query = 'SELECT ''' + SUBSTRING(@string, , LEN(@string))+ ') VALUES(''+ ' + SUBSTRING(@stringData, ,LEN(@stringData) - )+ '''+'')'' FROM ' +@schemaName+'.'+ @tableName + ' WHERE ' + @whereClausePRINT @query-- EXEC sp_executesql @query --load and run the built query--Eventually, close and de-allocate the cursor created for columns information.ENDELSEBEGIN SET @query = 'SELECT ''' + SUBSTRING(@string, , LEN(@string))+ ') VALUES(''+ ' + SUBSTRING(@stringData, ,LEN(@stringData) - )+ '''+'')'' FROM ' + @schemaName+'.'+ @tableNameENDCLOSE cursColDEALLOCATE cursColSET @schemaNameCount=@schemaNameCount-IF(@schemaNameCount=)BEGINSET @QueryString=@QueryString+@queryENDELSEBEGINSET @QueryString=@QueryString+@query+' UNION ALL 'ENDPRINT convert(varchar(max),@schemaNameCount)+'---'+@QueryStringENDEXEC sp_executesql @QueryString --load and run the built query--Eventually, close and de-allocate the cursor created for columns information. 

這里要聲明一下,如果你有多個schema,并且每個schema下面都有同一張表,那么腳本只會生成其中一個schema下面的表insert腳本

比如我現(xiàn)在有三個schema,下面都有customer這個表

CREATE TABLE dbo.[customer](city int,region int)CREATE SCHEMA testCREATE TABLE test.[customer](city int,region int)CREATE SCHEMA test1CREATE TABLE test1.[customer](city int,region int) 

在執(zhí)行腳本的時候他只會生成dbo這個schema下面的表insert腳本

INSERT INTO [dbo].[customer]([city],[region]) VALUES('1','2') 

這個腳本有一個缺陷

無論你的表的字段是什麼數(shù)據(jù)類型,導(dǎo)出來的時候只能是字符

表結(jié)構(gòu)

CREATE TABLE [dbo].[customer](city int,region int) 

導(dǎo)出來的insert腳本

INSERT INTO [dbo].[customer]([city],[region]) VALUES('1','2') 

我這里演示一下怎麼用

有兩種方式

1、導(dǎo)全表數(shù)據(jù)

InsertGenerator 'customer', null 

InsertGenerator 'customer', ' ' 

將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版

2、根據(jù)查詢條件導(dǎo)數(shù)據(jù)

InsertGenerator 'customer', 'city=3' 

或者

InsertGenerator 'customer', 'city=3 and region=8' 

將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版

點擊一下,選擇全部

將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版

然后復(fù)制

將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版

新建一個查詢窗口,然后粘貼

將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版

其實SQLServer的技巧有很多

最后,大家可以看一下代碼,非常簡單,如果要支持SQLServer2000,只要改一下代碼就可以了

補充:創(chuàng)建一張測試表

CREATE TABLE testinsert (id INT,name VARCHAR(100),cash MONEY,dtime DATETIME)INSERT INTO [dbo].[testinsert]( [id], [name], [cash], [dtime] )VALUES ( 1, -- id - int'nihao', -- name - varchar(100)8.8, -- cash - moneyGETDATE() -- dtime - datetime)SELECT * FROM [dbo].[testinsert] 

測試

InsertGenerator 'testinsert' ,''InsertGenerator 'testinsert' ,'name=''nihao'''InsertGenerator 'testinsert' ,'name=''nihao'' and cash=8.8' 

datetime類型會有一些問題

生成的結(jié)果會自動幫你轉(zhuǎn)換

INSERT INTO [dbo].[testinsert]([id],[name],[cash],[dtime]) VALUES('1','nihao',convert(money,'8.80'),convert(datetime,'02 8 2015 5:17PM')) 

--------------------------------------------------------------------------------

群里的人共享的另一個腳本

IF OBJECT_ID('spGenInsertSQL','P') IS NOT NULL DROP PROC spGenInsertSQLGOCREATE proc spGenInsertSQL (@tablename varchar(256),@number BIGINT,@whereClause NVARCHAR(MAX))asbegindeclare @sql varchar(8000)declare @sqlValues varchar(8000)set @sql =' ('set @sqlValues = 'values (''+'select @sqlValues = @sqlValues + cols + ' + '','' + ' ,@sql = @sql + '[' + name + '],'from(select casewhen xtype in (48,52,56,59,60,62,104,106,108,122,127) then 'case when '+ name +' is null then ''NULL'' else ' + 'cast('+ name + ' as varchar)'+' end'when xtype in (58,61,40,41,42)then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast('+ name +' as varchar)'+ '+'''''''''+' end'when xtype in (167)then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'when xtype in (231)then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'when xtype in (175)then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar) + '))+'''''''''+' end'when xtype in (239)then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar) + '))+'''''''''+' end'else '''NULL'''end as Cols,namefrom syscolumns where id = object_id(@tablename)) TIF (@number!=0 AND @number IS NOT NULL)BEGINset @sql ='select top '+ CAST(@number AS VARCHAR(6000))+' ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')'' from '+@tablenameprint @sqlENDELSEBEGIN set @sql ='select ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')'' from '+@tablenameprint @sqlENDPRINT @whereClauseIF ( @whereClause IS NOT NULL AND @whereClause <> '')BEGINset @sql =@sql+' where '+@whereClauseprint @sqlENDexec (@sql)endGO 

調(diào)用示例

--非dbo默認架構(gòu)需注意--支持數(shù)據(jù)類型 :bigint,int, bit,char,datetime,date,time,decimal,money, nvarchar(50),tinyint, nvarchar(max),varchar(max),datetime2--調(diào)用示例 如果top行或者where條件為空,只需要把參數(shù)填上nullspGenInsertSQL 'customer' --表名, 2 --top 行數(shù), 'city=3 and didian=''大連'' ' --where 條件--導(dǎo)出全表 where條件為空spGenInsertSQL 'customer' --表名, null --top 行數(shù),null --where 條件INSERT INTO [Department] ([DepartmentID],[Name],[GroupName],[Company],[ModifiedDate]) values (1,N'售后部',N'銷售組',N'中國你好有限公司XX分公司','05 5 2015 5:58PM')INSERT INTO [Department] ([DepartmentID],[Name],[GroupName],[Company],[ModifiedDate]) values (2,N'售后部',N'銷售組',N'中國你好有限公司XX分公司','05 5 2015 5:58PM') 

以上所述是本文給大家分享的將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版,希望大家喜歡。



注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
91国偷自产一区二区三区观看| 国产在线综合视频| 国产乱人乱偷精品视频| **性色生活片久久毛片| 精品一二三四区| 精品麻豆av| 毛片aaaaaa| 免费看又色又爽又黄网站| 国产午夜福利精品| 亚洲999一在线观看www| 麻豆入口视频在线观看| 视频在线观看免费高清| 日韩不卡视频一区二区| 男人天堂视频在线| 影音先锋日韩av| 91亚洲精品久久久| 欧美经典三级视频一区二区三区| 亚洲最大成人在线观看| 久久久久在线观看| 丰满湿润大白屁股bbw按摩| 91av福利视频| 亚洲av永久纯肉无码精品动漫| 不卡精品视频| www.色视频| www.成人av| 久久看人人摘| 一区二区三区视频在线观看| 亚洲国产高清不卡| 国产在线观看黄| 亚洲五码在线观看视频| av片在线观看| 免费观看一区二区三区毛片| 天堂v视频永久在线播放| 日韩av手机在线| 精品国产18久久久久久| 欧美一级片免费在线观看| 欧美成人app| 精品亚洲成a人在线观看| 美女高潮网站| 欧美性受xxxx黑人猛交| 国产高清亚洲一区| 亚洲最新免费视频| 国产专区第一页| 国产精品裸体一区二区三区| 成人午夜视频精品一区| 亚洲国产欧美不卡在线观看| 国产一级淫片a视频免费观看| 国产欧美精品一区二区三区-老狼| aaa毛片在线观看| 国产乱人伦偷精品视频不卡| 天堂午夜影视日韩欧美一区二区| 极品人妻一区二区三区| 国产一区二区免费在线观看| 日韩三级电影网站| 亚洲色图清纯唯美| 亚洲成人一区二区| 久久精品国产77777蜜臀| 亚洲欧美精品一区二区三区| 亚洲成人精选| 久久人人爽人人爽人人片亚洲| 国产大奶视频| 亚洲女优在线观看| 尤物视频在线观看免费| 精品国产aⅴ一区二区三区东京热| 精品无码国模私拍视频| 电影在线观看一区| 成人免费午夜电影| 97久久超碰国产精品电影| 日韩一区二区三区国产| 亚洲国产电影在线观看| 色天天综合狠狠色| 成年人在线免费| 国产极品视频在线观看| 亚洲一区二区天堂| 中文字幕在线观看2018| 国产精品99久久久久久www| 久久精品无码一区二区三区毛片| 成人精品高清在线| 日韩激情美女| 二区视频在线| 久久久国产精品成人免费| 日本精品专区| 欧美有码在线观看| 久久午夜夜伦鲁鲁一区二区| 色视频免费在线观看| 国产一级片在线播放| 亚洲人成人一区二区在线观看| 中文精品视频一区二区在线观看| 你懂得视频在线观看| www.日本精品| 亚洲图片小说在线| 精品免费在线视频| 欧美做爰猛烈大尺度视频| 不卡一区二区在线| 激情五月开心婷婷| www污污网站在线看| 日韩 欧美一区二区三区| 韩国欧美亚洲国产| 欧美久久综合网| 51成人做爰www免费看网站| www.欧美com| 欧美一区二区免费| 国偷自产一区二区免费视频| 亚洲人午夜精品| 国产无码精品在线观看| 新欧美整片sss第一页| 成人看片黄a免费看在线| 在线精品观看国产| 神宫寺奈绪一区二区三区| 亚洲精品成人免费| 精品一区精品二区高清| 少妇高潮久久久久久潘金莲| 自拍偷拍亚洲| 精品无码一区二区三区电影桃花| 国产精品亚洲精品| 男女视频网站| 国产精品91在线观看| 青草青草久热精品视频在线网站| 风韵丰满熟妇啪啪区老熟熟女| 久久久久国内| 日本视频中文字幕一区二区三区| 粉嫩一区二区三区国产精品| 国产成人精品免高潮在线观看| 最新国产精品亚洲| 欧美videos另类齐全| 欧洲福利电影| 无码人妻精品一区二区三区蜜桃91| hs网站在线观看| 在线视频亚洲欧美| 精品日本一区二区三区| 午夜激情福利电影| 在线综合亚洲| 国产精品wwwww| 欧美xxx黑人xxx水蜜桃| 亚洲欧美日韩精品久久亚洲区| 欧美日韩极品在线观看一区| 国产在线精品一区二区夜色| 日韩精品一区二区三区在线观看| 人人九九精品| 狠狠色伊人亚洲综合网站l| 日韩精品在线第一页| 色综合中文综合网| 91午夜理伦私人影院| 亚洲在线观看免费视频| 亚洲欧洲日产国码二区| 成人av播放| 中文字幕免费国产精品| 老司机在线永久免费观看| 亚洲警察之高压线| a级影片在线观看| 亚洲欧美一区二区激情| eeuss影院www在线| 亚洲永久精品国产| 东北一级毛片| 中国女人内谢69视频| 欧美白人最猛性xxxxx69交| 一区二区视频在线| 欧美激情欧美激情在线五月| 国产精品一区二区在线观看网站| 久久久免费人体| 中文字幕剧情在线观看一区| 亚洲欧洲日本一区二区三区| 国产亚洲精品久久久久久| 大香伊人久久| 国产精品第12页| 亚洲天天影视网| 亚洲第一二三四区| 日本少妇xxxx软件| 日韩中文字幕91| 亚洲国产精品欧美久久| 在线影视一区二区三区| 精品国产欧美日韩一区二区三区| 很黄很a的视频| 国产精品区一区二区三| 日本三级很黄试看120秒| 黄色视屏网站在线免费观看| 色琪琪综合男人的天堂aⅴ视频| 欧美影院天天5g天天爽| 国产激情精品一区二区三区| 免费操人视频| 免费在线观看a| a级大胆欧美人体大胆666| 日日躁夜夜躁aaaabbbb| 日韩三级视频在线| 亚洲+小说+欧美+激情+另类| 国产在线不卡视频| 亚洲午夜久久久影院| 经典三级一区二区| 成人在线观看免费播放| 色综合狠狠操| 国产欧美精品日韩区二区麻豆天美| 天堂中文在线看| 天天躁日日躁狠狠躁欧美巨大小说| 日本欧美加勒比视频| 国产精品av在线| 日韩中文字幕在线观看视频| 成人精品一区二区三区电影| 999福利视频| 亚洲精品观看| 亚洲无吗一区二区三区| 国产后进白嫩翘臀在线观看视频| 宅男深夜免费观看视频| 色网视频在线| 久久久成人av| 欧美精品在线一区二区三区| 亚洲三级国产| 免费看日韩精品| 一起草在线视频| 国产精品伦一区二区三区级视频频| 色天天综合久久久久综合片| 男男gay免费网站| 精品一区二区三区四| 在线视频国产福利| 丝袜脚交免费网站xx| 精品国产伦一区二区三区| 亚洲男女视频在线观看| 激情成人在线观看| 粉嫩欧美一区二区三区高清影视| 天堂网.www在线资源| 91精品欧美一区二区三区综合在| 亚洲成人tv网| 欧美亚洲高清一区二区三区不卡| 国产色婷婷亚洲99精品小说| 三级一区在线视频先锋| 91网站在线免费观看| 美女三级福利视频| 国产成人精品免费久久久久| 小舞被吸乳羞羞网站视频| 亚洲第一页在线| 一级片在线免费观看视频| 欧美成人免费一级人片100| 日本成人a视频| 亚洲男人天堂视频| 亚洲欧美电影在线观看| 视色,视色影院,视色影库,视色网| 夜夜嗨av一区二区三区网页| 色猫猫成人app| 宅男网站在线免费观看| 91久久精品美女高潮| 免费在线播放第一区高清av| 免费视频中文字幕| 国产免费av国片精品草莓男男| 在线观看电影av| 波多野结衣有码| 欧美国产精品一区二区| 亚洲乱码精品一二三四区日韩在线| 福利片在线看| 亚洲色图综合图区| 西西444www无码大胆| 手机av在线网| 久久只有这里有精品| 国产激情一区二区三区桃花岛亚洲| 亚洲最大在线| 91视频观看免费| 日本搞黄视频| 丁香六月激情综合| 国产精品免费精品一区| 91成人短视频| 国产精品sm调教免费专区| 91久久国产综合| 国产电影精品久久禁18| 羞羞的视频在线观看| 黑人极品ⅴideos精品欧美棵| 亚洲自拍在线观看| 亚洲淫成人影院| 久久久久人妻一区精品色| 红桃av在线播放| 亚洲国产日韩在线一区模特| 777a∨成人精品桃花网| 95视频在线观看| 日韩精品电影在线| 国内精品视频一区| 日本爱爱爱视频| 久久精品国产一区二区三区肥胖| 亚洲国产精品久久久久蝴蝶传媒| 中文字幕日产av一二三区| 欧美日韩亚洲自拍| 国产精品99久久久久久董美香| 免费观看日韩电影| 精品一区二区三区自拍图片区| 五月综合激情| 情趣网站在线观看| 成人a视频在线| 欧美成人全部免费| 在线免费av一区| 亚洲黄色免费电影| wwwcom羞羞网站| 日韩在线一区二区三区| 一区二区在线观看视频在线观看| 亚洲国产高清在线观看视频| 国产成人黄色av| 在线观看日韩一区二区| 51蜜桃传媒精品一区二区| 97国产suv精品一区二区62| 西西大胆午夜视频| 性色av浪潮av| 国产美女视频一区二区二三区| 精品无码m3u8在线观看| 岛国片免费看| 欧美无砖砖区免费| 日韩精品一区二区三区av| 青青草97国产精品麻豆| 亚欧视频在线观看| 欧美精品一区二区在线播放| 97dyy97影院理论片在线| 人妻少妇精品一区二区三区| 激情 小说 亚洲 图片: 伦| 91精品综合| 九九热这里只有精品免费看| 久久草视频在线看| 日本天堂影院在线视频| 俄罗斯黄色一级片| 国产伦精品一区二区三区四区| 免费黄色在线视频| 免费一级电影| 免费在线成人| 日日夜夜天天综合入口| 日韩成人动漫| 成人动漫视频在线观看| 国产吧在线视频| 亚洲一区二区视频在线播放| 欧美成人精品网站| av高清在线免费观看| 日本xxxwww免费视频| 成人午夜激情网| 毛片在线播放视频| 国产亚洲精品久久飘花| 好吊色在线观看|