(Sql server)用现有表中的数据创建Sql的Insert插入语句[通俗易懂]

(Sql server)用现有表中的数据创建Sql的Insert插入语句[通俗易懂]之前,在Codeproject发表过一篇关于用现有表中数据创建Insert的Sql语句的存储过程,今天将其搬到这里来,注意本存储过程仅适用于SQL SERVER。 介绍 一些时候,你想导出一些现有表中

之前,在Codeproject发表过一篇关于用现有表中数据创建Insert的Sql语句的存储过程,今天将其搬到这里来,注意本存储过程仅适用于SQL SERVER。

介绍

一些时候,你想导出一些现有表中记录的Sql脚本以便你可以插入这些数据到另一个数据库的相似表中。有很多方式可以做到,现在,我将跟大家分享一个存储过程来一起实现它。希望对各位有所帮助。

代码

首先,请在你的SQL Server数据库中创建如下名为[dbo].[sp_CreateInsertScript]存储过程

[dbo].[sp_CreateInsertScript] content:

--=============================================
-- Author: Mark Kang
-- Company: www.ginkia.com
-- Create date: 2016-03-06
-- Description: Generat the insert sql script according to the data in the specified table.
--              It does not support the columns with timestamp,text,image.
-- Demo : exec sp_CreateInsertScript "[dbo].[Country]","[continent_name]=""North America"""
-- Change History:
--         1.2016-03-06 Created and published
--         2.2016-03-08 Based on Mike"s suggestions, I optimized the codes
--         3.2019-03-09 1)Add code lines to avoid error when @con is empty string
--                      2)Based on Lukas Macedo"s suggetstions, add surrounding brackets for column name
--                      3)Simplify WHEN...CASE
-- =============================================
CREATE PROC [dbo].[sp_CreateInsertScript] (
    @tablename NVARCHAR(256) -- table name
    ,@con NVARCHAR(400) -- condition to filter data
    ,@ignoreIdentityCol bit=0 --indicate if ignore columne with identity
    ,@isDebug bit=0 --indicate if this is used to debug. when 1,output the internal sql string
    )
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @sqlstr NVARCHAR(MAX);
    DECLARE @valueStr1 NVARCHAR(MAX);
    DECLARE @colsStr NVARCHAR(MAX);
    SELECT @sqlstr="SELECT ""INSERT "+@tablename;
    SELECT @valueStr1="";
    SELECT @colsStr="(";
    SELECT @valueStr1="VALUES (""+";

    IF RTRIM(LTRIM(@con))=""
        SET @con="1=1";

    SELECT @valueStr1=@valueStr1+col+"+"",""+" 
            ,@colsStr=@colsStr+"["+name +"]," 
    FROM (
            SELECT 
                    CASE
                        /* xtype=173 "binary"
                        xtype=165 "varbinary"*/
                        WHEN sc.xtype in (173,165) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"CONVERT(NVARCHAR("+CONVERT(NVARCHAR(4),sc.[length]*2+2)+"),["+sc.name +"])"+" END"                        
                        /*xtype=104 "bit"*/
                        WHEN sc.xtype =104 THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"CONVERT(NVARCHAR(1),["+sc.name +"])"+" END"                        
                        /*xtype=61 "datetime"
                        xtype=58 "smalldatetime"*/
                        WHEN sc.xtype in(58,61) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"""N""""""+"+"CONVERT(NVARCHAR(23),"+sc.name +",121)"+ "+"""""""""+" END"
                        /*xtype=175 "char"
                        xtype=36 "uniqueidentifier"
                        xtype=167 "varchar"
                        xtype=231 "nvarchar"
                        xtype=239 "nchar"*/
                        WHEN sc.xtype in (36,175,167,231,239) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"""N""""""+"+"REPLACE(["+sc.name+"],"""""""","""""""""""")" + "+"""""""""+" END"
                        /*xtype=106 "decimal"
                        xtype=108 "numeric"*/
                        WHEN sc.xtype in(106,108) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"CONVERT(NVARCHAR("+CONVERT(NVARCHAR(4),sc.xprec+2)+"),["+sc.name +"])"+" END"
                        /*xtype=59 "real"
                        xtype=62 "float"*/
                        WHEN sc.xtype in (59,62) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"CONVERT(NVARCHAR(23),"+sc.name +",2)"+" END"
                        /*xtype=48 "tinyint"
                        xtype=52 "smallint"
                        xtype=56 "int"
                        xtype=127 "bigint"
                        xtype=122 "smallmoney"
                        xtype=60 "money"*/
                        WHEN sc.xtype in (48,52,56,127,122,60) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"CONVERT(NVARCHAR(23),["+sc.name +"])"+" END"
                        ELSE """NULL"""
                    END    AS col
                ,sc.colid
                ,sc.name
            FROM syscolumns AS sc 
            WHERE sc.id = object_id(@tablename) 
            AND sc.xtype <>189 --xtype=189 "timestamp" 
            AND sc.xtype <>34 --xtype=34 "image" 
            AND sc.xtype <>35 --xtype= 35 "text"
            AND (columnproperty(sc.id, sc.name, "IsIdentity") = 0 OR @ignoreIdentityCol=0)
            ) AS t 
    ORDER BY colid;
        
    SET @colsStr=left(@colsStr,len(@colsStr)-1)+") ";
    SET @valueStr1=left(@valueStr1,len(@valueStr1)-3)+")""";

    SELECT @sqlstr=@sqlstr+@colsStr+@valueStr1+" AS sql FROM "+@tablename +  " WHERE 1=1 AND  " + isnull(@con,"1=1");

    IF @isDebug=1
    BEGIN
        PRINT "1.columns string: "+ @colsStr;
        PRINT "2.values string: "+ @valueStr1
        PRINT "3."+@sqlstr;
    END

    EXEC( @sqlstr);
    SET NOCOUNT OFF
END
GO

代码100分

 

示例

下来,我举一个例子帮大家理解如何使用它,假设在你的数据库中有个表Country(国家),你想得到这个表中一些数据记录的用于插入的SQL语句,记录筛选条件是列continent_name(洲名)的值为North America的记录。表的创建脚本如下:

代码100分CREATE TABLE [dbo].[Country](
    [geoname_id] [varchar](50) NULL,
    [locale_code] [varchar](50) NULL,
    [continent_code] [varchar](50) NULL,
    [continent_name] [varchar](50) NULL,
    [country_iso_code] [varchar](50) NULL,
    [country_name] [varchar](50) NULL
) ON [PRIMARY]

下来,通过调用你创建的存储过程,用如下语句执行以便产生你想要的SQL的插入(INSERT)语句。调用执行脚本如下:

exec sp_CreateInsertScript "[dbo].[Country]","[continent_name]=""North America"""

执行之后,你会得到你想要结果,下图为我电脑的截图。

Image 1

现在,你就可以拷贝这些结果或者通过右键菜单的选项保持输出结果为一个查询或者文本文件,以便你下来使用。Thanks!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11059.html

(0)
上一篇 2022-12-17
下一篇 2022-12-17

相关推荐

  • 用Python编写简单爬虫程序

    用Python编写简单爬虫程序在信息爆炸的今天,我们往往需要从海量的网络信息中快速、准确地获取自己需要的数据。这时,一个高效的网络爬虫程序无疑会大大提升我们的工作效率。Python作为一个简单易学、功能强大、开发效率高的编程语言,越来越成为网络爬虫领域的热门工具。在本文中,我们将介绍如何用Python编写一只简单的爬虫程序,帮助读者初步掌握Python爬虫的基础知识。

    2024-04-15
    80
  • Python三元运算符的用法详解

    Python三元运算符的用法详解Python三元运算符是一种简洁的if-else判断形式,可以在一行中进行判断,使代码更加简洁明了。本文将详细介绍Python三元运算符的使用方法。

    2024-08-26
    23
  • 查看Mysql版本号

    查看Mysql版本号一、使用命令行模式进入mysql会看到最开始的提示符;二、命令行中使用status可以看到;三、使用系统函数等等,查看版本信息#1使用命令行模式进入mysql会看到最开始的提示符mysql–uroo…

    2023-03-24
    152
  • mysql进阶知识_什么是MySQL

    mysql进阶知识_什么是MySQLMYSQL(进阶篇)——一篇文章带你深入掌握MYSQL 我们在上篇文章中已经学习了MYSQL的基本语法和概念 在这篇文章中我们将讲解底层结构和一些新的语法帮助你更好的运用MYSQL 温馨提醒:该文章大

    2023-05-30
    155
  • mysql基础语句大全_mysql语句在哪里输入

    mysql基础语句大全_mysql语句在哪里输入查看语句 查看所有数据库 show databases; 查看表结构 desc table_name; 查看库中所有表 show tables; 查看建表语句 show create table ;

    2023-02-13
    147
  • Linux环境 mysql用navicat远程连接常见问题2003 1130 1045

    Linux环境 mysql用navicat远程连接常见问题2003 1130 1045mysql用navicat远程连接常见问题1、常见问题2003字面意思就是不能连接到10.0.0.7上面的mysql服务,为啥就不能连接了?哪里有限制?本地就可以连接啊看下服务器端监听的mysql服…

    2023-03-31
    151
  • mysql怎么配置环境变量_MySQL配置

    mysql怎么配置环境变量_MySQL配置一、先决条件 假设我们已经成功安装MySQL数据库。如果还有小伙伴不知道如何安装MySQL数据库,可以在本文下留言,留言数超20,则出一期“手把手教你安装MySQL数据库——图文详解”的文章。 二、登

    2023-06-03
    145
  • 定位服务器_gps登录不上服务器

    定位服务器_gps登录不上服务器GPS时间服务器(NTP服务器)京准教你选型小窍门

    2023-03-03
    154

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注