设为首页 收藏本站
查看: 960|回复: 0

[经验分享] 【实用SQL脚本】生成数据发布的INSERT语句

[复制链接]

尚未签到

发表于 2018-10-15 08:30:04 | 显示全部楼层 |阅读模式
  【问题】DB结构的发布,SQL Server的管理器可以生成脚本;那么数据如何发布呢?
  【思路】生成INSERT INTO ... VALUES...语句
  


  • /*-- =============================================
  • -- Author:      Yew
  • -- Create date: 2012-05-18
  • -- Description: 生成数据发布的INSERT脚本

  • ----TestCode---------------------------
  • EXEC [TOOL].[Script_Insert]
  •      @Schema    = 'COMMON'
  •     ,@Table     = 'Config'
  •     ,@Filter    = '[Key] LIKE ''test%'' '
  •     ,@Field0    = '[Key]'
  •     ,@Field1    = 'SubKey'
  •     ,@Field2    = 'Value'
  •     ,@Field3    = null
  •     ,@Field4    = null

  • EXEC [TOOL].[Script_Insert]
  •      @Schema    = 'COMMON'
  •     ,@Table     = 'MasterData'
  •     ,@Filter    = 'Category = ''SheetItem_PreloadType'' '
  •     ,@Field0    = 'Category'
  •     ,@Field1    = 'Code'
  •     ,@Field2    = 'Name'
  •     ,@Field3    = 'Ord'
  •     ,@Field4    = null

  • ----History---------------------------
  • -- =============================================*/
  • ALTER PROCEDURE [TOOL].[Script_Insert]
  •      @Schema    sysname = 'dbo'
  •     ,@Table     sysname
  •     ,@Filter    sysname = null
  •     ,@Field0    sysname
  •     ,@Field1    sysname = null
  •     ,@Field2    sysname = null
  •     ,@Field3    sysname = null
  •     ,@Field4    sysname = null
  • AS
  • BEGIN
  •     SET NOCOUNT ON;

  •     -- 0. Define Const
  •     DECLARE @NL     varchar(2) --NewLine
  •     SET @NL = char(13) + char(10)

  •     DECLARE @vSql   NVARCHAR(max)
  •         ,@objName   sysname
  •         ,@fieldList sysname

  •     -- 1. prepare the statement

  •     IF @Schema = ''
  •         SET @Schema = 'dbo'

  •     SET @objName = @Schema + '.' + @Table

  •     SET @vSql = 'SET QUOTED_IDENTIFIER OFF;

  • SELECT
  • "INSERT INTO ' + @objName + '(' + @Field0
  •     IF @Field1 IS NOT NULL
  •         SET @vSql = @vSql + '   ,' + @Field1
  •     IF @Field2 IS NOT NULL
  •         SET @vSql = @vSql + '   ,' + @Field2
  •     IF @Field3 IS NOT NULL
  •         SET @vSql = @vSql + '   ,' + @Field3
  •     IF @Field4 IS NOT NULL
  •         SET @vSql = @vSql + '   ,' + @Field4

  •     SET @vSql = @vSql + '   )'
  •         + @NL + 'VALUES(" + QuoteName(' + @Field0 + ', Char(39))'

  •     IF @Field1 IS NOT NULL
  •         SET @vSql = @vSql + @NL + ' +", " + QuoteName(IsNull(' + @Field1 + ', ""), Char(39))'
  •     IF @Field2 IS NOT NULL
  •         SET @vSql = @vSql + @NL + ' +", " + QuoteName(IsNull(' + @Field2 + ', ""), Char(39))'
  •     IF @Field3 IS NOT NULL
  •         SET @vSql = @vSql + @NL + ' +", " + QuoteName(IsNull(' + @Field3 + ', ""), Char(39))'
  •     IF @Field4 IS NOT NULL
  •         SET @vSql = @vSql + @NL + ' +", " + QuoteName(IsNull(' + @Field4 + ', ""), Char(39))'

  •     SET @vSql = @vSql + @NL + ' +")"'
  •         + @NL + 'FROM ' + @objName
  •     IF @Filter IS NOT NULL
  •         SET @vSql = @vSql + @NL + 'WHERE ' + @Filter

  •     -- 2.run it
  •     PRINT @vSql
  •     EXEC(@vSql)
  • END
  

  

  【注1】原本一个小工具,也不过花了2个小时,并不值得写篇Blog。但一来,这个工具很多人需要;二来这是今天重感冒下做出来的(当我这篇blog写到一半时,感冒消失了),更显珍贵。
  【注2】对于这个‘分享’:


  • 想做:但是我发现新人们大多不太注重编码规范、牛人们不愿意平衡功能与成本,这段代码里面很有些参照价值;
  • 可做:这是个纯粹的工具,不涉及机密;
  • 能做:这个工具足够小,很容易说清楚、看明白。
  还请读者们对作品本身发表意见。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-621712-1-1.html 上篇帖子: SQL语句杂记 下篇帖子: sql日期格式输出
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表