根據網上一個已有的存儲過程修改而來
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
分享到:
相关推荐
根据提供的信息,我们可以详细解析如何创建一个SQL Server的存储过程,该存储过程的功能是将指定表中的数据转换为INSERT语句。这对于数据备份、迁移或重构数据库时非常有用。 ### 存储过程名称:dataToSQLScript ...
其中,“行列转换”就是一种非常实用的功能,它可以帮助我们将表中的行数据转换为列数据,反之亦然。这种转换对于数据分析、报表制作等场景尤为重要。 #### 一、背景与需求分析 根据题目提供的内容,我们可以了解...
根据数据类型,存储过程会生成不同的转换逻辑,确保NULL值和非NULL值都能正确地转化为INSERT语句中的字符串格式。 对于不同数据类型,存储过程采用了条件判断(`CASE`语句)来处理。例如: - 对于数字类型(如INT)...
本文将详细介绍如何在使用C#语言时,通过SQL语句向Microsoft Access数据库插入数据,并在此过程中判断所需插入的数据是否已经存在。如果数据不存在,则继续执行插入操作;如果存在,则不执行插入操作。 首先,要...
5. **条件函数**:IFNULL或NVL,当值为NULL时替换为指定值,CASE语句用于条件判断。 在“oracle函数.doc”文档中,可能会涵盖更详细的函数使用和示例,例如: - **转换函数**:TO_NUMBER将字符串转换为数字,TO_...
用户在运行这个文件时,需要确保已准备好符合指定格式的Excel文件,然后通过该工具或脚本将Excel中的数据转换为SQL语句。 关于如何实现这个功能,可能涉及以下步骤: 1. 设计Excel模板:创建一个Excel文件,定义好...
1. **INSERT语句**:向表中插入新记录,可以插入单行或多行数据。 2. **UPDATE语句**:更新已存在的记录,常与WHERE子句结合使用。 3. **DELETE语句**:删除满足特定条件的记录,不加WHERE会删除所有记录。 **五、...
- **使用视图**:视图可以看作是虚拟表,它并不实际存储数据,而是代表了存储在其他表中的数据的集合。 - **列的重命名**:在创建视图时,可以通过AS子句为列指定新的名称。 - **SQL对视图的处理过程**:视图在执行...
30. **INTO关键字**:在INSERT INTO语句中,将查询结果插入新表或现有表。 31. **自连接**:一个表自身进行连接,用于处理自我关联的数据。 32. **CROSS APPLY和OUTER APPLY**:在某些SQL版本中,用于在JOIN操作中...
2. 数据插入:INSERT语句用于向表中添加新记录,如`INSERT INTO table_name (column1, column2) VALUES (value1, value2);` 3. 数据更新:UPDATE语句用于修改现有数据,如`UPDATE table_name SET column1 = value1 ...
创建表后,可以通过INSERT INTO语句向表中插入数据。 **4.2 创建视图** 视图可以视为一个虚拟表,其内容由一个SQL查询定义。创建视图可以简化复杂的查询过程,同时保护底层数据的安全性。在SAS中,使用CREATE VIEW...
2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。 二、索引优化 3. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描。...
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 ...
2. **避免NULL值判断**:在WHERE子句中避免使用NULL值比较,可以为字段设置默认值并用等于操作符进行替代,比如将NULL转换为0。 3. **避免使用!=或操作符**:这些操作符会使索引失效,最好改用其他方式实现相同功能...
例如,在上面的代码中,使用 if(bs instanceof Book) 来判断 bs 是否是 Book 类的实例,然后强制类型转换为 Book,以便访问子类中的方法 show3()。 在 SQL 语句插入数据时遇到单引号的问题可以通过替换单引号或使用...
数据类型转换是将数据从一种类型转换为另一种类型,如`CONVERT`或`CAST`函数。 以上就是"SQL基础语句.pdf"中涉及的主要内容,这些知识点构成了SQL的基础操作和进阶技巧,对于数据库管理和数据分析工作至关重要。...
这段示例展示了如何创建一个包含日期字段`gmt_modified`的表,并通过`SELECT`语句结合`WHERE`子句来筛选特定日期范围内的记录。 #### 二、SQLServer数据库的高级操作 这部分主要介绍SQL Server中的一些高级功能,...
- **INSERT语句**:向表中插入新行。 - **UPDATE语句**:更新表中的现有行。 - **DELETE语句**:删除表中的行。 #### 六、DDL语句应用 - **CREATE语句** - 表:创建新的表结构。 - 索引:创建索引以提高查询性能...
这条SQL语句用于创建一个名为`b`的新表,并复制表`a`的结构到新表`b`中,但不会复制任何数据。这里通过`WHERE 1<>1`条件来确保没有任何行被实际插入到新表中。 ### 2. 拷贝表数据 **SQL语句示例**: ```sql INSERT...