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

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

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

熱門標簽:臺灣外呼系統(tǒng)軟件 濮陽清豐400開頭的電話申請 地圖標注可以編輯地名嗎 南通智能外呼系統(tǒng)怎么樣 疫情時期電話機器人 樂昌電話機器人 地圖標注跑線下市場 真3地圖標注 南京怎么申請400這種電話

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

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

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

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

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

-- Author: 樺仔>
-- Blog: http://www.cnblogs.com/lyhabc/>
-- Create date: //>
-- Description: 根據(jù)查詢條件導出表數(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 statement
DECLARE @stringData NVARCHAR(MAX) --for storing the data (VALUES) related statement
DECLARE @dataType NVARCHAR(MAX) --data types returned for respective columns
DECLARE @schemaName NVARCHAR(MAX) --schema name returned from sys.schemas
DECLARE @schemaNameCount int--shema count
DECLARE @QueryString NVARCHAR(MAX) -- provide for the whole query, 
set @QueryString=' '
--如果有多個schema,選擇其中一個schema
SELECT @schemaNameCount=COUNT(*)
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.name = @tableName
WHILE(@schemaNameCount>)
BEGIN
--如果有多個schema,依次指定
select @schemaName = name 
from 
(
SELECT ROW_NUMBER() over(order by s.schema_id) RowID,s.name
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.name = @tableName
) as v
where RowID=@schemaNameCount
--Declare a cursor to retrieve column specific information 
--for the specified table
DECLARE cursCol CURSOR FAST_FORWARD
FOR
SELECT column_name ,
data_type
FROM information_schema.columns
WHERE table_name = @tableName
AND table_schema = @schemaName
OPEN cursCol
SET @string = 'INSERT INTO [' + @schemaName + '].[' + @tableName + ']('
SET @stringData = ''
DECLARE @colName NVARCHAR()
FETCH NEXT FROM cursCol INTO @colName, @dataType
PRINT @schemaName
PRINT @colName
IF @@fetch_status > 
BEGIN
PRINT 'Table ' + @tableName + ' not found, processing skipped.'
CLOSE curscol
DEALLOCATE curscol
RETURN
END
WHILE @@FETCH_STATUS = 
BEGIN
IF @dataType IN ( 'varchar', 'char', 'nchar', 'nvarchar' )
BEGIN
SET @stringData = @stringData + '''''''''+
isnull(' + @colName + ','''')+'''''',''+'
END
ELSE
IF @dataType IN ( 'text', 'ntext' ) --if the datatype 
--is text or something else 
BEGIN
SET @stringData = @stringData + '''''''''+
isnull(cast(' + @colName + ' as nvarchar(max)),'''')+'''''',''+'
END
ELSE
IF @dataType = 'money' --because money doesn't get converted 
--from varchar implicitly
BEGIN
SET @stringData = @stringData
+ '''convert(money,''''''+
isnull(cast(' + @colName
+ ' as nvarchar(max)),''.'')+''''''),''+'
END
ELSE
IF @dataType = 'datetime'
BEGIN
SET @stringData = @stringData
+ '''convert(datetime,''''''+
isnull(cast(' + @colName + ' as nvarchar(max)),'''')+''''''),''+'
END
ELSE
IF @dataType = 'image'
BEGIN
SET @stringData = @stringData + '''''''''+
isnull(cast(convert(varbinary,' + @colName + ') 
as varchar()),'''')+'''''',''+'
END
ELSE --presuming the data type is int,bit,numeric,decimal 
BEGIN
SET @stringData = @stringData + '''''''''+
isnull(cast(' + @colName + ' as nvarchar(max)),'''')+'''''',''+'
END
SET @string = @string + '[' + @colName + ']' + ','
FETCH NEXT FROM cursCol INTO @colName, @dataType
END
--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 size
PRINT @whereClause
IF ( @whereClause IS NOT NULL
AND @whereClause > ''
)
BEGIN 
SET @query = 'SELECT ''' + SUBSTRING(@string, , LEN(@string))
+ ') VALUES(''+ ' + SUBSTRING(@stringData, ,
LEN(@stringData) - )
+ '''+'')'' 
FROM ' +@schemaName+'.'+ @tableName + ' WHERE ' + @whereClause
PRINT @query
-- EXEC sp_executesql @query --load and run the built query
--Eventually, close and de-allocate the cursor created for columns information.
END
ELSE
BEGIN 
SET @query = 'SELECT ''' + SUBSTRING(@string, , LEN(@string))
+ ') VALUES(''+ ' + SUBSTRING(@stringData, ,
LEN(@stringData) - )
+ '''+'')'' 
FROM ' + @schemaName+'.'+ @tableName
END
CLOSE cursCol
DEALLOCATE cursCol
SET @schemaNameCount=@schemaNameCount-
IF(@schemaNameCount=)
BEGIN
SET @QueryString=@QueryString+@query
END
ELSE
BEGIN
SET @QueryString=@QueryString+@query+' UNION ALL '
END
PRINT convert(varchar(max),@schemaNameCount)+'---'+@QueryString
END
EXEC 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 test
CREATE TABLE test.[customer](city int,region int)
CREATE SCHEMA test1
CREATE TABLE test1.[customer](city int,region int) 

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

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

這個腳本有一個缺陷

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

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

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

導出來的insert腳本

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

我這里演示一下怎麼用

有兩種方式

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

InsertGenerator 'customer', null 


InsertGenerator 'customer', ' ' 


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

InsertGenerator 'customer', 'city=3' 

或者

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

點擊一下,選擇全部


然后復制


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

其實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 - money
GETDATE() -- 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 spGenInsertSQL
GO
CREATE proc spGenInsertSQL (@tablename varchar(256),@number BIGINT,@whereClause NVARCHAR(MAX))
as
begin
declare @sql varchar(8000)
declare @sqlValues varchar(8000)
set @sql =' ('
set @sqlValues = 'values (''+'
select @sqlValues = @sqlValues + cols + ' + '','' + ' ,@sql = @sql + '[' + name + '],'
from
(select case
when 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,name
from syscolumns 
where id = object_id(@tablename)
) T
IF (@number!=0 AND @number IS NOT NULL)
BEGIN
set @sql ='select top '+ CAST(@number AS VARCHAR(6000))+' ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')'' from '+@tablename
print @sql
END
ELSE
BEGIN 
set @sql ='select ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')'' from '+@tablename
print @sql
END
PRINT @whereClause
IF ( @whereClause IS NOT NULL AND @whereClause > '')
BEGIN
set @sql =@sql+' where '+@whereClause
print @sql
END
exec (@sql)
end
GO 

調(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ù)填上null
spGenInsertSQL 'customer' --表名
, 2 --top 行數(shù)
, 'city=3 and didian=''大連'' ' --where 條件
--導出全表 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語句的存儲過程 增強版,希望大家喜歡。

您可能感興趣的文章:
  • PHP用mysql_insert_id()函數(shù)獲得剛插入數(shù)據(jù)或當前發(fā)布文章的ID
  • MyBatis中insert操作返回主鍵的實現(xiàn)方法
  • jQuery中的insertBefore(),insertAfter(),after(),before()區(qū)別介紹
  • Oracle+Mybatis的foreach insert批量插入報錯的快速解決辦法
  • MySQL觸發(fā)器 Update觸發(fā)Insert失敗
  • MyBatis批量插入(insert)數(shù)據(jù)操作
  • 詳解MySQL數(shù)據(jù)庫insert和update語句
  • MySQL中insert語句的使用與優(yōu)化教程
  • C++ primer基礎之容器insert

標簽:阿里 河北 通遼 南京 陜西 廣安 馬鞍山 福建

巨人網(wǎng)絡通訊聲明:本文標題《將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版》,本文關鍵詞  將,表里,的,數(shù)據(jù),批量,生成,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 下面列出與本文章《將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版》相關的同類信息!
  • 本頁收集關于將表里的數(shù)據(jù)批量生成INSERT語句的存儲過程 增強版的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    蜜臀av性久久久久蜜臀aⅴ流畅 | 久久久精品国产免大香伊| 91久久香蕉国产日韩欧美9色| 成人性视频网站| 99久久国产综合精品女不卡| 暴力调教一区二区三区| 国产成人福利片| 成人精品鲁一区一区二区| 成人免费黄色大片| 在线亚洲欧美专区二区| 国产色一区二区| 精品国产人成亚洲区| 2021久久国产精品不只是精品| 26uuu色噜噜精品一区| 中文字幕乱码久久午夜不卡| 国产精品国产三级国产普通话蜜臀| 亚洲欧美综合另类在线卡通| 亚洲综合在线免费观看| 日韩中文字幕麻豆| 国产一区二区三区久久久| av激情成人网| 欧美日韩大陆在线| 久久久夜色精品亚洲| 中文字幕制服丝袜一区二区三区| 亚洲国产视频直播| 久久国产视频网| 成人免费看黄yyy456| 欧美这里有精品| 精品久久国产老人久久综合| 中文字幕亚洲综合久久菠萝蜜| 天天影视涩香欲综合网| 国产成人aaa| 在线不卡a资源高清| 国产精品久久久久久久午夜片 | 久久精品国产秦先生| caoporn国产一区二区| 91精品免费在线观看| 中文字幕不卡的av| 麻豆国产91在线播放| 99久久久久久99| 精品国产免费一区二区三区四区| 亚洲欧美一区二区三区极速播放| 蜜桃在线一区二区三区| 欧美午夜精品久久久| 国产精品人成在线观看免费 | 欧美亚洲综合另类| 日本一区二区三区视频视频| 日韩成人一区二区三区在线观看| 成人a区在线观看| 久久亚洲精品小早川怜子| 性感美女久久精品| 91年精品国产| 欧美国产一区二区| 精品午夜久久福利影院| 精品婷婷伊人一区三区三| 亚洲视频一区在线| 成人三级伦理片| 久久久久久97三级| 精品一区二区综合| 日韩免费观看高清完整版| 日韩有码一区二区三区| 欧美专区在线观看一区| 亚洲欧美视频在线观看视频| 成人免费毛片高清视频| 国产欧美日韩不卡免费| 国产一区二区三区美女| 国产日韩在线不卡| 丁香网亚洲国际| 国产精品久久久久久久久快鸭| 国产精品伊人色| 国产精品午夜免费| 国产不卡在线视频| 国产精品久久久久一区| 91蝌蚪porny成人天涯| 中文字幕字幕中文在线中不卡视频| 处破女av一区二区| 国产精品女主播在线观看| 99国产精品久久久久| 亚洲欧美日韩国产另类专区| 色视频成人在线观看免| 亚洲成av人片在www色猫咪| 欧美少妇性性性| 免费成人结看片| 精品嫩草影院久久| 国产精品888| 亚洲精品中文字幕乱码三区| 欧美午夜免费电影| 久久精品久久久精品美女| 欧美大片一区二区| 成人精品视频一区二区三区 | 成人免费在线观看入口| 色综合天天综合网天天看片| 亚洲一区二区三区中文字幕 | 中文字幕不卡的av| 在线免费不卡视频| 久久99精品一区二区三区| 国产精品水嫩水嫩| 69精品人人人人| 国产69精品久久久久777| 亚洲男帅同性gay1069| 欧美精品久久久久久久久老牛影院| 久久99热这里只有精品| 国产精品久久久久久亚洲毛片 | 亚洲大片免费看| 久久综合九色欧美综合狠狠| 99精品久久久久久| 欧美a一区二区| 国产精品三级av| 日韩免费看的电影| 色婷婷av一区二区三区gif | 国产精品久久毛片| 日韩欧美精品在线视频| 99久久精品国产一区二区三区| 日韩和的一区二区| 亚洲免费观看高清| 久久亚洲一区二区三区明星换脸 | 免费观看久久久4p| 亚洲欧美日韩国产手机在线 | 一区二区不卡在线视频 午夜欧美不卡在| 欧美日韩免费视频| 91一区二区三区在线播放| 精品一区二区三区在线播放| 亚洲精品v日韩精品| 久久久久久久久久久99999| 欧美精品一二三区| 欧洲一区二区三区在线| 99热99精品| 国产成人在线色| 黄页视频在线91| 免费视频最近日韩| 午夜久久久久久| 一区二区三区高清不卡| 中文字幕日韩一区| 国产精品女主播在线观看| 久久免费看少妇高潮| 777亚洲妇女| 欧美精品欧美精品系列| 欧美专区亚洲专区| 欧美中文字幕一区| 欧美性高清videossexo| 色综合久久久久久久久久久| 99re这里只有精品视频首页| 国产精品亚洲第一| 国产成人午夜视频| 成人国产精品视频| 91亚洲精品一区二区乱码| 成人免费看黄yyy456| 成人高清视频在线| av在线不卡免费看| 色婷婷久久99综合精品jk白丝| 91小视频免费观看| 欧美在线视频你懂得| 欧美日韩国产一二三| 欧美日韩国产乱码电影| 日韩色在线观看| 久久久精品2019中文字幕之3| 精品国产一区二区三区av性色 | 五月婷婷激情综合| 麻豆精品一区二区三区| 国产精品综合一区二区三区| 风间由美中文字幕在线看视频国产欧美| 成人中文字幕合集| 91麻豆视频网站| 91麻豆精品国产91久久久久久久久| 51精品视频一区二区三区| 欧美r级电影在线观看| 欧美国产精品一区二区三区| 一区二区三区四区高清精品免费观看| 亚洲高清不卡在线| 国内精品伊人久久久久av影院| 成人免费视频网站在线观看| 在线一区二区三区四区| 精品久久久久香蕉网| 一色桃子久久精品亚洲| 亚洲国产另类av| 国产精品亚洲а∨天堂免在线| 99精品国产91久久久久久| 欧美一级黄色片| 国产精品久久久久久久岛一牛影视| 亚洲影视资源网| 国产一区二区91| 欧美视频在线观看一区| 国产午夜精品久久久久久免费视| 一区二区三区免费在线观看| 精品一区二区日韩| 欧美日韩中文字幕一区| 欧美国产精品一区二区三区| 天天影视网天天综合色在线播放| 成人午夜av电影| 日韩亚洲欧美成人一区| 亚洲理论在线观看| 国产成人精品亚洲日本在线桃色| 欧美日免费三级在线| 亚洲欧洲精品一区二区精品久久久 | 欧洲在线/亚洲| 国产精品色眯眯| 国产麻豆一精品一av一免费| 欧美日韩aaa| 一区二区三区精品在线| 北条麻妃国产九九精品视频|