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

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:47:43
字體:
來源:轉載
供稿:網友
將表里的數據批量生成INSERT語句的存儲過程 繼續增強版

文章繼續 樺仔兄的文章將表里的數據批量生成INSERT語句的存儲過程 增強版繼續增強...

本來打算將該內容回復于樺仔兄的文章的下面的,但是不知為何博客園就是不讓提交!....

所以在這里貼出來吧,算作繼續增加文章中解決的:根據查詢條件自動生成插入腳本的需求,其實這種需求還是蠻常見的。

本文著重解決了文中的腳本的schema問題,給調整了下,現在腳本能自動識別出不同的schema下同名的表的語句

修改后腳本如下:

-- Author:      <樺仔>-- Blog:        <http://www.cnblogs.com/lyhabc/>-- Create date: <2014/10/18>-- Description: <根據查詢條件導出表數據的insert腳本>-- =============================================ALTER  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>0)    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(500)    FETCH NEXT FROM cursCol INTO @colName, @dataType    PRINT @schemaName    PRINT @colName    IF @@fetch_status <> 0        BEGIN            PRINT 'Table ' + @tableName + ' not found, processing skipped.'            CLOSE curscol            DEALLOCATE curscol            RETURN        END    WHILE @@FETCH_STATUS = 0        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)),''0.0000'')+''''''),''+'                        END                    ELSE                        IF @dataType = 'datetime'                            BEGIN                                SET @stringData = @stringData                                    + '''convert(datetime,''''''+        isnull(cast(' + @colName + ' as nvarchar(max)),''0'')+''''''),''+'                            END                        ELSE                            IF @dataType = 'image'                                BEGIN                                    SET @stringData = @stringData + '''''''''+       isnull(cast(convert(varbinary,' + @colName + ')        as varchar(6)),''0'')+'''''',''+'                                END                            ELSE --presuming the data type is int,bit,numeric,decimal                             BEGIN                                    SET @stringData = @stringData + '''''''''+          isnull(cast(' + @colName + ' as nvarchar(max)),''0'')+'''''',''+'                                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, 0, LEN(@string))                + ') VALUES(''+ ' + SUBSTRING(@stringData, 0,                                              LEN(@stringData) - 2)                + '''+'')''    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, 0, LEN(@string))                + ') VALUES(''+ ' + SUBSTRING(@stringData, 0,                                              LEN(@stringData) - 2)                + '''+'')''     FROM ' + @schemaName+'.'+ @tableName        END    CLOSE cursCol    DEALLOCATE cursCol    SET @schemaNameCount=@schemaNameCount-1    IF(@schemaNameCount=0)    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.

1、測試腳本如下:

INSERT INTO test1.[customer]([city],[region]) VALUES('2','3')InsertGenerator 'customer', null

效果如下:

2、增加篩選條件

InsertGenerator 'customer', 'city=1'

其它內容可以參照樺仔兄的原文章地址。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合色av| 麻豆国产精品va在线观看不卡| 久久天天躁狠狠躁夜夜av| 国产九九精品视频| 国产91精品最新在线播放| 成人在线国产精品| 欧美黑人xxxⅹ高潮交| 亚洲福利视频网站| 久久影视电视剧凤归四时歌| 亚洲二区中文字幕| 91精品啪aⅴ在线观看国产| 国产精品久久久久av| 亚洲黄色有码视频| 欧美伊久线香蕉线新在线| 午夜美女久久久久爽久久| 日韩风俗一区 二区| 欧美激情在线观看视频| 性色av一区二区三区在线观看| 国产成人精品av| 亚洲人成网站免费播放| 日韩欧美中文字幕在线观看| 亚洲欧美一区二区三区情侣bbw| 国产视频观看一区| 亚洲人成电影在线观看天堂色| 亚洲人成网站999久久久综合| 欧美成人精品影院| 精品无码久久久久久国产| 国产精品久久久久久久美男| 国产精品999999| 日韩av日韩在线观看| 日韩中文在线观看| 日韩中文字幕不卡视频| 亚洲精品乱码久久久久久按摩观| 国产91av在线| 亚洲第一精品福利| www.久久久久久.com| 欧美洲成人男女午夜视频| 一区二区亚洲欧洲国产日韩| 久久视频国产精品免费视频在线| 国产91免费看片| 九九热精品视频在线播放| 91国内免费在线视频| 久久久久国产精品www| 成人国产精品久久久| 中文字幕亚洲自拍| 欧美久久精品一级黑人c片| 成人欧美一区二区三区黑人孕妇| 一区二区三区动漫| 日韩天堂在线视频| 精品国产一区二区三区在线观看| 中文字幕日韩高清| 中文字幕精品影院| 国产欧美一区二区三区在线看| 日本成人精品在线| 日韩av在线网址| 成人综合国产精品| 91美女片黄在线观看游戏| 菠萝蜜影院一区二区免费| 青草青草久热精品视频在线观看| 红桃视频成人在线观看| 国产欧美最新羞羞视频在线观看| 色婷婷综合成人av| 九九精品视频在线| 久久夜精品va视频免费观看| 欧美视频一二三| 91久久国产综合久久91精品网站| 夜夜嗨av色综合久久久综合网| 在线色欧美三级视频| 日韩国产高清视频在线| 深夜福利国产精品| 国产啪精品视频| 色多多国产成人永久免费网站| 亚洲成人激情视频| 中文字幕日本欧美| 中文字幕精品www乱入免费视频| 最新的欧美黄色| 奇米4444一区二区三区| 一区二区国产精品视频| 狠狠色狠狠色综合日日小说| 欧美日韩另类在线| 57pao精品| 国产精品日韩在线一区| 91亚洲国产成人精品性色| 国产噜噜噜噜噜久久久久久久久| 亚洲精品av在线播放| 日本亚洲欧洲色α| 精品久久久久久久久久ntr影视| 性夜试看影院91社区| 亚州国产精品久久久| 91香蕉嫩草神马影院在线观看| 国产精品成人av性教育| 国产成人一区二区在线| 在线视频日本亚洲性| 欧美亚洲国产另类| 91国内在线视频| 最近2019中文字幕大全第二页| 成人综合国产精品| 日韩中文字幕av| 亚洲区中文字幕| www.亚洲免费视频| 国产美女扒开尿口久久久| 亚洲变态欧美另类捆绑| 欧美性黄网官网| 91成品人片a无限观看| 亚洲欧美精品一区二区| 欧美中文字幕视频在线观看| 国产精品久久久久久久久久久久| 亚洲免费中文字幕| 国产在线拍偷自揄拍精品| 亚洲欧美中文日韩v在线观看| 一本一道久久a久久精品逆3p| 高清欧美一区二区三区| 国产精品香蕉国产| 亚洲视频999| 欧美大全免费观看电视剧大泉洋| 亚洲人成电影网| 国模视频一区二区三区| 日本久久中文字幕| 在线午夜精品自拍| 2019中文字幕在线免费观看| 久久久这里只有精品视频| 欧美一级视频免费在线观看| 国产精品无码专区在线观看| 久久影院中文字幕| 欧美日韩国产成人在线观看| 国产精品高精视频免费| 国外日韩电影在线观看| 欧美成人精品一区二区三区| 亚洲国产精品免费| 久久视频在线观看免费| 欧美高跟鞋交xxxxhd| 丁香五六月婷婷久久激情| 中文精品99久久国产香蕉| 欧美最猛性xxxxx(亚洲精品)| 国产精品成人av性教育| 97视频色精品| 尤物九九久久国产精品的特点| 欧洲美女7788成人免费视频| 亚洲欧洲成视频免费观看| 成人在线国产精品| 青青草99啪国产免费| 亚洲欧美激情在线视频| 欧美精品福利在线| 久久亚洲精品中文字幕冲田杏梨| 日本欧美爱爱爱| 欧美一级视频免费在线观看| 亚洲有声小说3d| 精品久久香蕉国产线看观看亚洲| 最新国产精品亚洲| 亚洲999一在线观看www| 国产精品成人v| 国内精品久久久久久中文字幕| 国产偷亚洲偷欧美偷精品| 韩国美女主播一区| 欧美激情视频免费观看| 国产精品美女999| 深夜精品寂寞黄网站在线观看| 欧美激情精品久久久久久黑人| 亚洲xxxx3d| 亚洲免费伊人电影在线观看av| 久久九九热免费视频| 少妇久久久久久| 欧美一区二区三区……| 在线视频欧美日韩|