日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 數據庫 > SQL Server > 正文

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

2024-08-31 01:03:35
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了將表里的數據批量生成INSERT語句的存儲過程 增強版的相關資料,需要的朋友可以參考下
 

有時候,我們需要將某個表里的數據全部或者根據查詢條件導出來,遷移到另一個相同結構的庫中

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

這種腳本網上也有很多,但是網上的腳本還是欠缺一些規范和功能,例如:我只想導出特定查詢條件的數據,網上的腳本都是導出全表數據

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

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

-- Author: <樺仔>-- Blog: <http://www.cnblogs.com/lyhabc/>-- Create date: <//>-- Description: <根據查詢條件導出表數據的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腳本

比如我現在有三個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) 

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

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

這個腳本有一個缺陷

無論你的表的字段是什麼數據類型,導出來的時候只能是字符

表結構

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

導出來的insert腳本

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

我這里演示一下怎麼用

有兩種方式

1、導全表數據

InsertGenerator 'customer', null 

InsertGenerator 'customer', ' ' 

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

2、根據查詢條件導數據

InsertGenerator 'customer', 'city=3' 

或者

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

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

點擊一下,選擇全部

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

然后復制

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

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

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

其實SQLServer的技巧有很多

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

補充:創建一張測試表

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類型會有一些問題

生成的結果會自動幫你轉換

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 

調用示例

--非dbo默認架構需注意--支持數據類型 :bigint,int, bit,char,datetime,date,time,decimal,money, nvarchar(50),tinyint, nvarchar(max),varchar(max),datetime2--調用示例 如果top行或者where條件為空,只需要把參數填上nullspGenInsertSQL 'customer' --表名, 2 --top 行數, 'city=3 and didian=''大連'' ' --where 條件--導出全表 where條件為空spGenInsertSQL 'customer' --表名, null --top 行數,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') 

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



注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
日韩欧美在线不卡| 亚洲一区三区在线观看| 天堂中文在线视频| 日韩中文字幕国产| 日韩精品在线视频| 成人久久在线| 黄色国产在线| 99在线国产| 国产亚洲欧美中文| 亚洲国产欧美日韩精品| 国产黄色精品| 日韩精品丝袜在线| 一区二区高清在线| 一区二区三区四区五区视频在线观看| 国产一级在线| 一区二区三区视频网站| 91九色在线看| 亚洲第一视频网站| 欧美中文字幕在线| 在线观看av的网站| 日韩欧美一二三区| 91精品国产综合久久香蕉最新版| 日本精品二区| 国产在线第一页| 99国产成 人 综合 亚洲欧美| 精品国产91| 国产成人精品999在线观看| 中文亚洲欧美| 免费高清特黄a大片| 成片免费观看| 色综合影院在线| 国产一级久久久| 一区二区三区在线|网站| 亚洲a级在线播放观看| 欧美高清一级片在线| 亚洲欧美久久久| 91精品国产免费| 欧美专区中文字幕| 欧美日韩精品在线| 91精品啪在线观看国产60岁| 国产亚洲人成a一在线v站 | 在线中文字幕视频观看| 国产乱码在线观看| 欧美日韩91| 中文字幕国产视频| 亚洲免费看av| 99久久精品国产成人一区二区| 中文字幕日韩国产| 欧美变态tickling挠脚心| 欧美日韩性视频| 久久综合久久综合九色| 日韩精品国产欧美| 天堂中文在线视频| 国产h片在线观看| 青青久在线视频免费观看| 亚洲免费观看在线观看| 日韩精品在线私人| 日韩精品在线视频| 日韩1区在线| 精品日韩在线| 欧美日韩精品中文字幕| 91精品免费观看| 内射国产内射夫妻免费频道| 欧美高清视频一区二区三区| 日韩中文字幕第一页| 99这里有精品视频| 一区二区不卡视频在线观看| 免费视频二区| 日韩精品a在线观看91| 日韩国产欧美在线视频| 日韩午夜黄色| 欧美二区在线观看| 午夜少妇久久久久久久久| 亚洲 欧美 日韩系列| 精品久久久91| 日韩亚洲国产欧美| 欧美日韩国产不卡在线看| 91精品国产网站| 日韩在线观看视频一区二区| 99国产成 人 综合 亚洲欧美 | 中文字幕在线视频网| 日韩午夜高潮| 日韩亚洲不卡在线| 亚洲小说春色综合另类网蜜桃| 日韩高清在线不卡| 国产一级片播放| 精品一区二区三区中文字幕在线| 日韩精品一区二区三区视频播放| 中文av字幕一区| 婷婷中文字幕在线观看| 亚洲男女av一区二区| 欧美精选午夜久久久乱码6080| 精品中文字幕视频| 日韩欧美在线精品| 国产www.大片在线| 一区二区三区精品在线观看| 国产对白在线| a在线观看免费视频| 亚洲福利视频专区| www.三级.com| 日韩欧美在线中文字幕| 国产在线小视频| 中文字幕欧美日韩精品| 影音先锋一区二区资源站| 久久久精品国产免费观看同学| 日韩字幕在线观看| 美日韩精品免费视频| 国产欧美日韩不卡| 中文字幕亚洲一区在线观看| 国产精品一区二三区| 欧美国产综合在线V| 午夜一区二区三区视频| av手机天堂| 欧美日韩中文字幕在线观看| 亚洲一区中文字幕在线| 在线精品视频免费播放| av一区在线观看| www中文字幕| 中文字幕在线视频久| 蜜臀久久精品| 久久网站免费观看| 久久精品免费看| 中文字幕在线观看亚洲| 国产福利在线看| 一级片在线免费看| 91欧美在线视频| 精品日韩在线观看| 亚洲一区在线观看免费| 日韩中文字幕精品视频| 亚洲综合欧美在线| 伊人亚洲视频| 亚洲第一精品在线| 国产天堂素人系列在线视频| 欧美亚洲国产激情| 亚洲大片免费看| 国产视频aaa| 蜜臀91精品国产高清在线观看| 在线视频三区| 一区二区三区精品99久久| 欧美日韩人人澡狠狠躁视频| 欧美日韩999| 亚洲黄色www| 国产无套粉嫩白浆在线2022年 | 欧美日韩人人澡狠狠躁视频| 国产日韩亚洲欧美| 精品视频www| 亚洲 欧美 精品| 中文字幕久精品免费视频| 色偷偷一区二区三区| 国产九九在线| 欧美日韩在线播放一区| 国产 中文 字幕 日韩 在线| 国产日韩综合| 人妻一区二区三区免费| 国产久卡久卡久卡久卡视频精品| 精品成人久久久| 国产日韩专区| 中文字幕精品一区二区三区在线| 美女在线视频一区| 亚洲一二三不卡| 精品在线一区二区三区| 99国内精品| 精品日韩av| 本道综合精品| 国产www.大片在线| 一区二区三区高清在线| 在线观看一区| 久草亚洲一区| 欧美日韩在线观看成人| 欧美日韩中文字幕一区| 精品在线网站观看| 亚洲羞羞网站| 91欧美日韩在线| lutube成人福利在线观看| 日韩中文字幕网| 欧美专区中文字幕| 一级特黄aaa大片在线观看| 在线不卡一区二区| 91精品久久久久| 精品熟女一区二区三区| 久久99久久99精品中文字幕| 美日韩精品免费视频| 国产亚洲二区| 精品日韩av| 国产成人精品网址| 久久久久久久久综合| 久久99精品久久久久子伦| 精品日韩欧美| 日韩中文欧美在线| 欧美日韩日本视频| 久久中文免费视频| 日韩欧美在线不卡| 一本一道综合狠狠老| 91麻豆精品在线| 999精品在线| 欧美日韩在线视频一区| 欧洲精品久久久| 国产91久久久久蜜臀青青天草二| 91九色在线看| 国产成人精品综合久久久| 91精品国产手机| 国产一级视频| 国产欧美日韩不卡免费| 免费在线视频一区二区| 99精品电影| 日韩中文在线字幕| 欧美大片在线观看一区| 国产99在线 | 亚洲| 亚洲一区日韩在线| 黄污视频在线看| 欧美午夜精品在线| 91吃瓜在线观看| 亚洲 欧美 中文字幕| 91精品国产综合久久精品app| 影音先锋中文字幕在线观看| 亚洲一区在线观看视频| 1024国产在线| 中文字幕乱码在线| 午夜影院在线观看欧美| 国产日韩电影| 国产黄色在线观看| 日韩精品手机在线| 欧美日韩高清不卡| 国产亚洲一区字幕| 久久久精品免费免费| 欧美不卡一二三| 亚洲乱码视频| 一区二区91| 久久婷婷国产| 日韩欧美一级精品久久| 欧美日韩在线播放视频| 在线观看精品国产| 在线观看国产一级片| 午夜精品免费视频| 欧美日韩乱国产| 国产色在线 com| 亚洲第一视频| 亚洲午夜久久| 婷婷久久综合九色国产成人| 在线视频你懂得一区| 国产91欧美| 色www精品视频在线观看| 亚洲黄色在线观看| www.中文字幕在线| 欧美亚洲免费高清在线观看| 日韩视频 中文字幕| 91久久精品网| 国产日韩中文字幕在线| 日韩中文字幕在线播放| 亚洲视频在线观看日本a| 91久久精品国产91久久| 亚洲黄色片在线观看| 亚洲a级在线播放观看| 国产欧美日韩高清| 国产三级做爰在线观看| 亚洲国内精品视频| 日韩三级在线播放| 不卡中文一二三区| 欧美三级免费观看| 日韩在线高清| 亚洲综合欧美在线| 欧美天堂一区二区| 国产欧美综合视频| 久久蜜桃一区二区| www在线播放| 亚洲大片精品永久免费| 最近中文字幕在线中文高清版| 中文欧美字幕免费| 精品亚洲成a人片在线观看| 中文字幕亚洲欧美| 国产三级做爰在线观看| 欧美日韩国产123区| av首页在线| 日本一级一片免费视频| 国产欧美日韩在线视频| √天堂资源中文www| 欧美日韩国产一区中文午夜| 国产一级片网站| 在线视频日韩欧美| 欧美日韩视频免费| 国产欧美综合在线观看第十页| 成人xxxx| 在线免费91| 久精品在线观看| 国产一二三视频| 极品久久久久久| 国产123在线| 精品免费久久久| 免费在线播放av| 国产www.大片在线| 亚洲最新永久观看在线| 国产免费不卡av| 日韩精品视频免费播放| 午夜国产视频 | 欧美日韩精品在线播放| 视频一区二区不卡| а√天堂8资源中文在线| 刘玥91精选国产在线观看| 欧美中文字幕第一页| 99精品视频国产| 国产69精品久久app免费版| 中文字幕第一页在线播放| 亚洲 国产 欧美 日韩| 国自产拍在线网站网址视频| 欧美日韩国产免费观看| 精品一区二区三区中文字幕在线| 精品欧美久久久| 欧美不卡视频一区发布| 99视频在线看| 精品视频国产| 欧洲精品在线视频| 99热最新网址| 日韩精品在线播放| 国产日韩精品在线| 在线观看国产福利视频| 国产一区在线精品| av免费观看网站| 国产久卡久卡久卡久卡视频精品| 欧美日韩久久不卡| 日本熟女一区二区| 久久香蕉精品| 欧美日韩中文字幕一区| 中文字幕在线欧美| 九九视频精品免费| 国产在线小视频| 一区二区中文视频| 国产xxx在线| 亚洲大片精品永久免费| 日韩一级免费视频| 色综合影院在线| 欧美日韩高清| 国产一区二中文字幕在线看| 精品视频在线导航| 亚洲欧洲一区二区天堂久久| 国产不卡视频在线| 久久久综合精品| 红桃视频国产一区| 国产69精品久久久久孕妇国产69久久 | 日韩在线 中文字幕| 午夜精品一区二区三区免费视频| 精品日韩欧美| 一区二区日韩av| 91精品国产调教在线观看| 欧美三级日韩三级| 欧美日韩国产页| 日韩在线视频一区二区三区| 国产乱码在线| 亚洲欧洲国产视频| 日韩欧美亚洲视频| 亚洲综合日韩中文字幕v在线| 日韩精品丝袜在线| 91精品国产经典在线观看| 欧美二三四区| 久精品在线观看| 欧美日韩在线第一页| 欧美日韩国产高清一区| 欧美日韩国产影片| 欧美三级免费观看| 国产三级精品网站| 精人妻一区二区三区| 综合激情国产一区| 亚洲高清中文字幕| 欧美日韩亚洲视频| 欧美一级一级性生活免费录像| 国产乱一区二区| 日韩精品视频在线观看视频| 亚洲永久免费视频| 99久久精品国产亚洲| 中文字幕久久av| 最新中文字幕在线播放| 日韩福利视频导航| 一区在线播放视频| 午夜福利一区二区三区| 日韩欧美在线综合| 日韩欧美在线看| 一区二区三区免费看视频| 国产欧美日韩91| 99久久婷婷| 一区二区日韩av| 久久精品黄色片| 日韩欧美中文第一页| 91精品视频观看| 日韩区欧美区| 国产 欧美 在线| 91麻豆视频网站| 国产永久在线观看| 91精品国产99| 中文字幕日韩在线视频| 国产区视频在线观看| 久久夜色精品国产欧美乱极品| 国产日产一区二区| 欧美一卡2卡3卡4卡| 亚洲黄色一区二区| 国产激情在线视频| 久久久精品国产免费观看同学| 亚洲女人天堂a在线播放| 精品福利在线观看| 中文字幕欧美日韩在线| 内射国产内射夫妻免费频道| 香蕉av一区|