自动生成Insert数据的SQL脚本


判断当表存在标识列的时候就要允许将显式值插入表的标识列中,设置:Set Identity_Insert TableName Off
判断数据类型如,varchar,char,datetime,nvarchar,nchar,uniqueidentifier时候,在Insert字段中就要增加双引号,否则就不加;

Use  Test
Go
Declare  
        
@Table1   nvarchar ( 128 ),
        
@Table2   nvarchar ( 128 ),
        
@Sql1   nvarchar ( 4000 ),
        
@Sql2   nvarchar ( 4000 ),
        
@SqlIdentityInsert   nvarchar ( 512 )

Set   @Table1 = ' DutyHistory '      -- 源表
Set   @Table2 = ' Duty '              -- 目标表

IF   Object_id ( @Table1 , ' U ' Is   Null  
    
Return
If   Isnull ( @Table2 , '' ) = ''
    
Set   @Table2 = @Table1

Set   @SqlIdentityInsert = ''
If   Exists ( Select   1   From  sys.columns  Where   Object_id = Object_id ( @Table1 , ' U ' ))
    
Set   @SqlIdentityInsert = ' Select  '' Set Identity_Insert  ' + @Table2 + '  On  '''

Select  
    
@Sql1 = Isnull ( @Sql1 + ' , ' , '  Insert Into  ' + @Table2 + '  ( ' ) + Quotename (name),
    
@Sql2 = Isnull ( @Sql2 + ' + '' , '' + ' , ' Select @Sql1+ ''  Select  ''' ) + ' +Case When  ' + Quotename (name) + '  Is null Then  '' null ''  Else  ' +
            
Case   When  user_type_id  In ( 175 , 61 , 239 , 231 , 58 , 98 , 36 , 167 , 241 Then   ''''''''' +Rtrim( ' + Quotename (name) + ' )+ '''''''''   Else   ' Rtrim( ' + Quotename (name) + ' ) '   End   + '  End '
From  sys.columns 
Where   Object_id = Object_id ( @Table1 , ' U ' )

Set   @Sql1 = @Sql1 + ' ) '
Set   @Sql2 =      ' Select Convert(nvarchar(max), '' If Object_id( ''''' + @Table2 + ''''' , '''' U '''' ) Is Null Return; '' ) As SqlInsert  Union All  ' +
            
@SqlIdentityInsert + '  Union All  ' +
            
@Sql2 + '  From  ' + Quotename ( @Table1 ) + Case   @SqlIdentityInsert   When   ''   Then   ''   Else   '  Union All  '   End +
            
Replace ( @SqlIdentityInsert , '  On  ' , '  Off ' )

Exec  sp_executesql  @Sql2 ,N ' @Sql1 nvarchar(4000) ' , @Sql1

Result:

SqlInsert
---------------------------------------------------------
If Object_id('Duty','U') Is Null Return;
Set Identity_Insert Duty On
 Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 1,'Robert','01  1 2008 12:00AM',3.4
 Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 2,'Robert','01  2 2008 12:00AM',3.4
 Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 3,'Robert','01  3 2008 12:00AM',3.4
... ...
 Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 58,'Robert','02 27 2008 12:00AM',4.5
 Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 59,'Robert','02 28 2008 12:00AM',4.5
 Insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) Select 60,'Robert','02 29 2008 12:00AM',4.5
Set Identity_Insert Duty Off

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段Python脚本是用来生成测试数据并插入到MySQL数据库中的。它使用了Python的faker库来生成假数据,并使用了records库来连接和操作MySQL数据库。脚本首先定义了一个函数get_insert_sql,用于生成插入数据SQL语句。然后定义了一个函数get_row,用于生成一条数据记录。接下来,在main函数中,通过循环生成10万条数据,并使用bulk_query方法将数据批量插入到名为tb_user的表中。脚本中还包含了数据库连接的相关信息,如数据库地址、用户名、密码等。\[1\] 然而,根据引用\[2\]中的错误信息,脚本在执行过程中遇到了一个SQL语法错误。具体来说,这个错误是由于在SQL语句中出现了一个不正确的语法。可能是在生成SQL语句的过程中出现了错误,或者是在执行SQL语句的过程中出现了错误。需要检查SQL语句的语法是否正确,并确保与MySQL服务器版本相匹配。\[2\] 此外,根据引用\[3\]中的错误信息,还可能存在MySQLdb库的版本不兼容问题。这个错误信息表明在MySQLdb库的cursors模块中的execute方法出现了错误。可能需要检查MySQLdb库的版本,并确保与Python版本和操作系统相兼容。\[3\] 综上所述,如果你想使用这个脚本自动生成插入数据SQL语句,你需要确保SQL语句的语法正确,并检查MySQLdb库的版本是否与Python版本和操作系统相兼容。 #### 引用[.reference_title] - *1* [实战:利用Python脚本生成MySQL测试数据](https://blog.csdn.net/mouday/article/details/124677953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [在MySQLPython中使用INSERT INTO语句时出现语法错误](https://blog.csdn.net/weixin_39747975/article/details/113461648)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值