MsSql 根据表名和条件,生成Insert语句

简介: MsSql 根据表名和条件,生成Insert语句

ALTER proc [dbo].[proc_insert] (@tablename varchar(256),@where varchar(max))

as

begin

set nocount on

declare @sqlstr varchar(MAX)

declare @sqlstr1 varchar(MAX)

declare @sqlstr2 varchar(MAX)

select @sqlstr='select ''INSERT '+@tablename

select @sqlstr1=''

select @sqlstr2=' ('

select @sqlstr1= ' VALUES ( ''+'

select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case

-- when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'

when a.xtype =36 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

when a.xtype =127 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(20),'+a.name +')'+' end'

when a.xtype =104 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end'

when a.xtype =175 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

when a.xtype =61 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'

when a.xtype =106 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'

when a.xtype =62 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'

when a.xtype =56 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end'

when a.xtype =60 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'

when a.xtype =239 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

when a.xtype =108 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'

when a.xtype =231 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

when a.xtype =59 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'

when a.xtype =58 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'

when a.xtype =52 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end'

when a.xtype =122 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'

when a.xtype =48 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end'

-- when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'

when a.xtype =167 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

else '''NULL'''

end as col,a.colid,a.name

from syscolumns a

where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 -- and a.xtype <>36

 AND COLUMNPROPERTY(a.id, a.name, 'IsIdentity') <> 1

)t order by colid

select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename + ' where '+@where

-- print @sqlstr

exec(@sqlstr)

set nocount off

end


执行示例:


EXEC proc_insert '表名','age=18'


xtype的参照表:


   xtype=34 'image'

xtype= 35 'text'

xtype=36 'uniqueidentifier'

xtype=48 'tinyint'

xtype=52 'smallint'

xtype=56 'int'

xtype=58 'smalldatetime'

xtype=59 'real'

xtype=60 'money'

xtype=61 'datetime'

xtype=62 'float'

xtype=98 'sql_variant'

xtype=99 'ntext'

xtype=104 'bit'

xtype=106 'decimal'

xtype=108 'numeric'

xtype=122 'smallmoney'

xtype=127 'bigint'

xtype=165 'varbinary'

xtype=167 'varchar'


xtype=173 'binary'

xtype=175 'char'

xtype=189 'timestamp'

xtype=231 'nvarchar'


xtype=239 'nchar'

xtype=241 'xml'

xtype=231 'sysname'


相关文章
|
Java Maven
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
5283 0
|
Java 编译器
java: 源发行版 16 与 --enable-preview 一起使用时无效 (仅发行版 17 支持预览语言功能) & java: 错误: 无效的源发行版:15
java: 源发行版 16 与 --enable-preview 一起使用时无效 (仅发行版 17 支持预览语言功能) & java: 错误: 无效的源发行版:15
4908 0
|
物联网 Linux API
AliOS Things操作系统之设备驱动模型
开源操作系统中系统驱动框架做的最好的无疑是Linux系统,Linux系统中设计精良的驱动框架、设备树等功能会硬件厂商对接驱动系统的成本降到很低,并且通过接入VFS系统统一了Linux系统驱动对应用程序提供的接口。反观传统的RTOS系统大多数比较注重在内核功能的开发上,欠缺对驱动架构方面的设计。文本将介绍AliOS Things上设备驱动模型。
1115 2
|
12天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1253 5
|
1天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
11天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1273 87