iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >(Sql server)用现有表中的数据创建Sql的Insert插入语句
  • 517
分享到

(Sql server)用现有表中的数据创建Sql的Insert插入语句

摘要

之前,在Codeproject发表过一篇关于用现有表中数据创建Insert的sql语句的存储过程,今天将其搬到这里来,注意本存储过程仅适用于SQL Server。 介绍 一些时候,你想导出一些现有表中记录的Sql脚本以便你可以插入这些数据到

之前,在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
                        
                        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"                        
                        
                        WHEN sc.xtype =104 THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"CONVERT(NVARCHAR(1),["+sc.name +"])"+" END"                        
                        
                        WHEN sc.xtype in(58,61) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"""N""""""+"+"CONVERT(NVARCHAR(23),"+sc.name +",121)"+ "+"""""""""+" END"
                        
                        WHEN sc.xtype in (36,175,167,231,239) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"""N""""""+"+"REPLACE(["+sc.name+"],"""""""","""""""""""")" + "+"""""""""+" END"
                        
                        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"
                        
                        WHEN sc.xtype in (59,62) THEN "CASE WHEN ["+sc.name+"] is null THEN ""NULL"" ELSE "+"CONVERT(NVARCHAR(23),"+sc.name +",2)"+" END"
                        
                        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

 

示例

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

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!

您可能感兴趣的文档:

--结束END--

本文标题: (Sql server)用现有表中的数据创建Sql的Insert插入语句

本文链接: https://www.lsjlt.com/news/2042.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Sql server 中的bulk insert语句使用
    在SQL Server中,BULK INSERT语句用于将数据从外部文件加载到表中。这可以用于快速导入大量数据。以下是BULK IN...
    99+
    2023-09-15
    sql server
  • 使用SQL语句创建数据库与创建表
    前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个...
    99+
    2023-09-29
    数据库 sql
  • mysql创建表的sql语句
    这篇文章主要介绍mysql创建表的sql语句,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql创建表的sql语句mysql建表常用sql语句:连接:mysql -h主机地址 -...
    99+
    2024-04-02
  • 数据库怎么用SQL语句创建表
    要使用SQL语句创建表,你可以按照以下步骤进行操作:1. 使用CREATE TABLE语句创建一个新的表,并指定表的名称。例如:CR...
    99+
    2023-08-12
    SQL
  • sql server创建表后如何输入数据
    要输入数据到SQL Server创建的表中,可以使用以下方法之一:1. 使用INSERT语句插入单行数据:```sqlINSERT ...
    99+
    2023-09-27
    sql server
  • mysql中创建数据库的sql语句有哪些
    创建 mysql 数据库的 sql 语句:create database database_name可选参数:character set charset_name:指定字符集collat...
    99+
    2024-04-05
    mysql sql语句
  • Mysql数据库sql语句实现多表关联插入
    前言 最近在工作中遇到了sql批量插入数据且两张表有关联id的问题。A、B两张表,B表存储了A表的id。A表虽然是自增id,但在生产环境业务处理中难免会出现并发问题。那么sql批量插入数据时B表如何存...
    99+
    2023-09-24
    数据库 mysql sql
  • SQL中insert语句的作用有哪些
    在SQL中,INSERT语句用于向数据库表中插入新的行。它的作用有以下几个:1. 插入新的数据:INSERT语句可以将新的行插入到数...
    99+
    2023-08-24
    SQL
  • 怎么使用SQL语句插入数据
    这篇文章主要介绍怎么使用SQL语句插入数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用SQL语句操作数据表单击phpMyAdmin主界面中的超链接,打开SQL语句编辑区,输入完...
    99+
    2024-04-02
  • navicat用sql语句创建表的方法
    这篇文章给大家分享的是有关navicat用sql语句创建表的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。选择一个数据库,点击“查询”,在右侧点击“创建查询”,输入SQL语句...
    99+
    2024-04-02
  • SQL语句之表的创建和使用
    表 一、表的创建(DDL)1.建表的语法格式创建一个学生表 2.mysql中的数据类型3.删除表 二、在表中插入数据insert(DML)1.insert2.insert插入日期3.date和datetime区别 三、...
    99+
    2023-08-20
    sql 数据库 mysql
  • 数据库sql语句(视图的创建)
    例题:  建表:要注意各表之间的索引联系,建表先后顺序很重要,不然建不了,例如先建dept,在建其他表,先在dept插入数据,再在其他表插入数据 (1) create table week8student(SNO int primary...
    99+
    2023-09-27
    sql mysql 数据库
  • SQL Server中带有OUTPUT子句的INSERT,DELETE,UPDATE应用
    OUTPUT是SQL SERVER2005的新特性,可以从数据修改语句中返回输出,可以看作是"返回结果的DML"。 INSERT、DELETE、UPDAT...
    99+
    2024-04-02
  • navicat中怎么用sql语句创建表
    在Navicat中使用SQL语句创建表可以通过以下步骤: 打开Navicat数据库连接,在左侧的数据库列表中选择要创建表的数据库...
    99+
    2024-05-06
    navicat sql
  • SQL中INSERT语句的使用技巧
    以下是一些在使用INSERT语句时的技巧:1. 指定要插入数据的列:可以在INSERT语句中指定要插入数据的列,这样可以确保插入的数...
    99+
    2023-09-22
    SQL
  • 2.SQL--创建课程表和向表内插入数据
    --创建课程表,并向表内插入数据--新建课程表,Tid为教师编号create table Course(Cid varchar(10),Cname nvarchar(10),Tid va...
    99+
    2024-04-02
  • 用sql语句创建学生表的方法
    这篇文章主要介绍用sql语句创建学生表的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!步骤:1、打开“sql server”;2、用“creat table student();...
    99+
    2024-04-02
  • SQL Server数据库的如何修复SQL语句
    SQL Server数据库的如何修复SQL语句,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。出现这些情况的原因,往往是因为数据库有些损坏,...
    99+
    2024-04-02
  • SQL server中有哪些常用的语句
    SQL server中有哪些常用的语句,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、 简单查询&nbs...
    99+
    2024-04-02
  • sql中修改表数据的语句
    sql 中修改表数据的语句有两种:update 语句:用于更新指定行数据,语法为 update table_name set column = value where...
    99+
    2024-04-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作