`
gybmike
  • 浏览: 182698 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

將資料表中的資料轉換為insert語句,并增加判斷條件

阅读更多
根據網上一個已有的存儲過程修改而來
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tool_GenInsertSQL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[tool_GenInsertSQL]
GO
/*功能:將資料表中的資料轉換為insert語句,并增加判斷條件
*MSSQL 查詢分析器需調整 
*工具--選項--結果--每個資料行的字元數,增大到1024或更大,避免一行中資料較多,保存時會被截斷問題
* exec dbo.emisGenInsertSQL'ins_d','s_no,in_no','where s_no = ''000001'''
*/
create procedure tool_GenInsertSQL
(
    @TableName varchar(256)--資料表名
    ,@ExistCond varchar(256)--判斷條件中需要用於判斷的字段名稱,若有多個需用 "," 分隔,若不需判斷條件請給空字串
    ,@WhereOrderByClause varchar(1000) = '' --用於資料表的查詢條件和排序'where 1 = 1 order by null'
)
as
begin
    declare @sql varchar(8000)
    declare @sqlValues varchar(8000)
    declare @sqlExist varchar(1000) set @sqlExist=''
    declare @deli varchar(1) set @deli=','--分隔符,若傳入的判斷條件包多字段(多主鍵)
    declare @sqlExistCond varchar(1000) set @sqlExistCond = '(1=1)' --最終的判斷條件 
    declare @tempCond varchar(100)
    if @ExistCond>'' --不等於空才加判斷條件
        begin
	    --組判斷條件開始
	    while(  charindex(@deli,@ExistCond)>0 )
	             begin
		set @tempCond = substring(@ExistCond,1,charindex(@deli,@ExistCond)-1)
		set @sqlExistCond = @sqlExistCond + ' and ['+@tempCond+'] = ''''''+cast ('+@tempCond  +' as varchar)+'''''''
		set @ExistCond = substring(@ExistCond,charindex(@deli,@ExistCond)+1,len(@ExistCond))	
	             end		
	     set @sqlExistCond = @sqlExistCond + ' and ['+@ExistCond+'] = ''''''+cast ('+@ExistCond  +' as varchar)+'''''')'
	     set @sqlExist = 'if not exists (select 1 from ['+@TableName+'] where ' + @sqlExistCond--判斷條件
	     --組判斷條件完成 	
         end
    set @sql = ' ''(''' + char(13) + ','
    set @sqlValues = ' values ('''+ char(13) + ','
    --查出系統表中指定表的列名
    select @sqlValues = @sqlValues + cols + ' + '',' + '''' + char(13) + ','
            ,@sql = @sql + '''[' + name + '],''' + char(13) + ','
    from
    (
        select
            case
                when xtype in (48,52,56,59,60,62,104,106,108,122,127)
                -- 48 tinyint 52 smallint 56 int 59 real 60 money 62 float 104 bit 106 decimal 108 numeric 122 smallmoney 127 bigint
                    then 'case when ' + name + ' is null then ''NULL'' else ' + 'cast(' + name + ' as varchar)' + ' end'
                when xtype in (58,61)
                -- 58 smalldatetime 61 datetime
                    then 'case when ' + name + ' is null then ''NULL'' else ' + ''''''''' + ' + 'cast(' + name + ' as varchar)' + '+''''''''' + ' end'
                when xtype in (167,175)
                --  167 varchar 175 char	
                    then 'case when ' + name + ' is null then ''NULL'' else ' + ''''''''' + ' + 'replace(' + name + ','''''''','''''''''''')' + ' + ''''''''' + ' end'
                when xtype in (231,239)
                --231 nvarchar 239 nchar 
                    then 'case when ' + name + ' is null then ''NULL'' else ' + '''N'''''' + ' + 'replace(' + name + ','''''''','''''''''''')' + ' + ''''''''' + ' end'
                else '''NULL'''
            end as Cols
            ,name
        from syscolumns
        where id = object_id(@TableName)
                and autoval is null --忽略自動增長字段
    ) T
    --組最終sql成查詢語句并執行
    set @sql = 'select ''' + @sqlExist+''',' + char(13) + '''INSERT INTO ''' + char(13) + ','
                 + '''['+ @TableName + ']''' + char(13) + ','
                 + left(@sql,len(@sql)-4) + '''' + char(13) + ','')' + left(@sqlValues,len(@sqlValues)-7) + ','')'''
                 + char(13) + 'from [' + @TableName + ']'
                 + char(13) + @WhereOrderByClause

    print @sql -- print SQL 是完整正确的
    exec (@sql)

end

分享到:
评论

相关推荐

    导出insert语句的存储过程sql脚本

    根据提供的信息,我们可以详细解析如何创建一个SQL Server的存储过程,该存储过程的功能是将指定表中的数据转换为INSERT语句。这对于数据备份、迁移或重构数据库时非常有用。 ### 存储过程名称:dataToSQLScript ...

    Sql语句实现表的行列转换,行转列,列转行

    其中,“行列转换”就是一种非常实用的功能,它可以帮助我们将表中的行数据转换为列数据,反之亦然。这种转换对于数据分析、报表制作等场景尤为重要。 #### 一、背景与需求分析 根据题目提供的内容,我们可以了解...

    SQL Server存储过程生成insert语句实例

    根据数据类型,存储过程会生成不同的转换逻辑,确保NULL值和非NULL值都能正确地转化为INSERT语句中的字符串格式。 对于不同数据类型,存储过程采用了条件判断(`CASE`语句)来处理。例如: - 对于数字类型(如INT)...

    详细讲解C#在向ACCESS中插入数据时判断数据是否已存在.pdf

    本文将详细介绍如何在使用C#语言时,通过SQL语句向Microsoft Access数据库插入数据,并在此过程中判断所需插入的数据是否已经存在。如果数据不存在,则继续执行插入操作;如果存在,则不执行插入操作。 首先,要...

    数据库的(应用)常用语句

    5. **条件函数**:IFNULL或NVL,当值为NULL时替换为指定值,CASE语句用于条件判断。 在“oracle函数.doc”文档中,可能会涵盖更详细的函数使用和示例,例如: - **转换函数**:TO_NUMBER将字符串转换为数字,TO_...

    pb编写的execel自动生成sql语句

    用户在运行这个文件时,需要确保已准备好符合指定格式的Excel文件,然后通过该工具或脚本将Excel中的数据转换为SQL语句。 关于如何实现这个功能,可能涉及以下步骤: 1. 设计Excel模板:创建一个Excel文件,定义好...

    经典SQL语句函数大全

    1. **INSERT语句**:向表中插入新记录,可以插入单行或多行数据。 2. **UPDATE语句**:更新已存在的记录,常与WHERE子句结合使用。 3. **DELETE语句**:删除满足特定条件的记录,不加WHERE会删除所有记录。 **五、...

    sql 语句自学宝典

    - **使用视图**:视图可以看作是虚拟表,它并不实际存储数据,而是代表了存储在其他表中的数据的集合。 - **列的重命名**:在创建视图时,可以通过AS子句为列指定新的名称。 - **SQL对视图的处理过程**:视图在执行...

    50个常用sql语句.rar

    30. **INTO关键字**:在INSERT INTO语句中,将查询结果插入新表或现有表。 31. **自连接**:一个表自身进行连接,用于处理自我关联的数据。 32. **CROSS APPLY和OUTER APPLY**:在某些SQL版本中,用于在JOIN操作中...

    Oracle基本语句和基本函数

    2. 数据插入:INSERT语句用于向表中添加新记录,如`INSERT INTO table_name (column1, column2) VALUES (value1, value2);` 3. 数据更新:UPDATE语句用于修改现有数据,如`UPDATE table_name SET column1 = value1 ...

    sql语句在sas中的应用

    创建表后,可以通过INSERT INTO语句向表中插入数据。 **4.2 创建视图** 视图可以视为一个虚拟表,其内容由一个SQL查询定义。创建视图可以简化复杂的查询过程,同时保护底层数据的安全性。在SAS中,使用CREATE VIEW...

    浅谈MySQL中优化sql语句查询常用的30种方法.doc

    2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。 二、索引优化 3. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描。...

    精通sql结构化查询语句

    10.5 UNIQUE子查询与嵌套子查询 10.5.1 UNIQUE子查询 10.5.2 嵌套子查询 10.6 小结第4篇 T-SQL开发常用操作篇第11章 数据的维护操作 11.1 数据的插入操作 11.1.1 INSERT语句的基本语法 11.1.2 插入单条记录 11.1.3 ...

    select语句性能优化小结

    2. **避免NULL值判断**:在WHERE子句中避免使用NULL值比较,可以为字段设置默认值并用等于操作符进行替代,比如将NULL转换为0。 3. **避免使用!=或操作符**:这些操作符会使索引失效,最好改用其他方式实现相同功能...

    sql语句插入的数据中含有单引号怎么办[参照].pdf

    例如,在上面的代码中,使用 if(bs instanceof Book) 来判断 bs 是否是 Book 类的实例,然后强制类型转换为 Book,以便访问子类中的方法 show3()。 在 SQL 语句插入数据时遇到单引号的问题可以通过替换单引号或使用...

    SQL基础语句.pdf

    数据类型转换是将数据从一种类型转换为另一种类型,如`CONVERT`或`CAST`函数。 以上就是"SQL基础语句.pdf"中涉及的主要内容,这些知识点构成了SQL的基础操作和进阶技巧,对于数据库管理和数据分析工作至关重要。...

    SQL语句大全集合

    这段示例展示了如何创建一个包含日期字段`gmt_modified`的表,并通过`SELECT`语句结合`WHERE`子句来筛选特定日期范围内的记录。 #### 二、SQLServer数据库的高级操作 这部分主要介绍SQL Server中的一些高级功能,...

    SQL应用培训资料

    - **INSERT语句**:向表中插入新行。 - **UPDATE语句**:更新表中的现有行。 - **DELETE语句**:删除表中的行。 #### 六、DDL语句应用 - **CREATE语句** - 表:创建新的表结构。 - 索引:创建索引以提高查询性能...

    经典sql语句

    这条SQL语句用于创建一个名为`b`的新表,并复制表`a`的结构到新表`b`中,但不会复制任何数据。这里通过`WHERE 1<>1`条件来确保没有任何行被实际插入到新表中。 ### 2. 拷贝表数据 **SQL语句示例**: ```sql INSERT...

Global site tag (gtag.js) - Google Analytics