乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Sql server中用現(xiàn)有表中的數(shù)據(jù)創(chuàng)建Sql的Insert插入語句

       新進(jìn)小設(shè)計(jì) 2022-05-02 發(fā)布于北京

      之前,在Codeproject發(fā)表過一篇關(guān)于用現(xiàn)有表中數(shù)據(jù)創(chuàng)建Insert的Sql語句的存儲(chǔ)過程,今天將其搬到這里來,注意本存儲(chǔ)過程僅適用于SQL SERVER。

      介紹

      一些時(shí)候,你想導(dǎo)出一些現(xiàn)有表中記錄的Sql腳本以便你可以插入這些數(shù)據(jù)到另一個(gè)數(shù)據(jù)庫的相似表中。有很多方式可以做到,現(xiàn)在,我將跟大家分享一個(gè)存儲(chǔ)過程來一起實(shí)現(xiàn)它。希望對(duì)各位有所幫助。

      代碼

      首先,請(qǐng)?jiān)谀愕腟QL Server數(shù)據(jù)庫中創(chuàng)建如下名為[dbo].[sp_CreateInsertScript]存儲(chǔ)過程,其內(nèi)容如下:

      --=============================================
      -- Author: Mark Kang
      -- Company: www.ginkia.com
      -- Create date: 2016-03-06
      -- Description: Generat the insert sql script according to the data in the specified table.
      --              It does not support the columns with timestamp,text,image.
      -- Demo : exec sp_CreateInsertScript '[dbo].[Country]','[continent_name]=''North America'''
      -- Change History:
      --         1.2016-03-06 Created and published
      --         2.2016-03-08 Based on Mike's suggestions, I optimized the codes
      --         3.2019-03-09 1)Add code lines to avoid error when @con is empty string
      --                      2)Based on Lukas Macedo's suggetstions, add surrounding brackets for column name
      --                      3)Simplify WHEN...CASE
      -- =============================================
      CREATE PROC [dbo].[sp_CreateInsertScript] (
          @tablename NVARCHAR(256) -- table name
          ,@con NVARCHAR(400) -- condition to filter data
          ,@ignoreIdentityCol bit=0 --indicate if ignore columne with identity
          ,@isDebug bit=0 --indicate if this is used to debug. when 1,output the internal sql string
          )
      AS
      BEGIN
          SET NOCOUNT ON
          DECLARE @sqlstr NVARCHAR(MAX);
          DECLARE @valueStr1 NVARCHAR(MAX);
          DECLARE @colsStr NVARCHAR(MAX);
          SELECT @sqlstr='SELECT ''INSERT '+@tablename;
          SELECT @valueStr1='';
          SELECT @colsStr='(';
          SELECT @valueStr1='VALUES (''+';
      
          IF RTRIM(LTRIM(@con))=''
              SET @con='1=1';
      
          SELECT @valueStr1=@valueStr1+col+'+'',''+' 
                  ,@colsStr=@colsStr+'['+name +'],' 
          FROM (
                  SELECT 
                          CASE
                              /* xtype=173 'binary'
                              xtype=165 'varbinary'*/
                              WHEN sc.xtype in (173,165) THEN 'CASE WHEN ['+sc.name+'] is null THEN ''NULL'' ELSE '+'CONVERT(NVARCHAR('+CONVERT(NVARCHAR(4),sc.[length]*2+2)+'),['+sc.name +'])'+' END'                        
                              /*xtype=104 'bit'*/
                              WHEN sc.xtype =104 THEN 'CASE WHEN ['+sc.name+'] is null THEN ''NULL'' ELSE '+'CONVERT(NVARCHAR(1),['+sc.name +'])'+' END'                        
                              /*xtype=61 'datetime'
                              xtype=58 'smalldatetime'*/
                              WHEN sc.xtype in(58,61) THEN 'CASE WHEN ['+sc.name+'] is null THEN ''NULL'' ELSE '+'''N''''''+'+'CONVERT(NVARCHAR(23),'+sc.name +',121)'+ '+'''''''''+' END'
                              /*xtype=175 'char'
                              xtype=36 'uniqueidentifier'
                              xtype=167 'varchar'
                              xtype=231 'nvarchar'
                              xtype=239 'nchar'*/
                              WHEN sc.xtype in (36,175,167,231,239) THEN 'CASE WHEN ['+sc.name+'] is null THEN ''NULL'' ELSE '+'''N''''''+'+'REPLACE(['+sc.name+'],'''''''','''''''''''')' + '+'''''''''+' END'
                              /*xtype=106 'decimal'
                              xtype=108 'numeric'*/
                              WHEN sc.xtype in(106,108) THEN 'CASE WHEN ['+sc.name+'] is null THEN ''NULL'' ELSE '+'CONVERT(NVARCHAR('+CONVERT(NVARCHAR(4),sc.xprec+2)+'),['+sc.name +'])'+' END'
                              /*xtype=59 'real'
                              xtype=62 'float'*/
                              WHEN sc.xtype in (59,62) THEN 'CASE WHEN ['+sc.name+'] is null THEN ''NULL'' ELSE '+'CONVERT(NVARCHAR(23),'+sc.name +',2)'+' END'
                              /*xtype=48 'tinyint'
                              xtype=52 'smallint'
                              xtype=56 'int'
                              xtype=127 'bigint'
                              xtype=122 'smallmoney'
                              xtype=60 'money'*/
                              WHEN sc.xtype in (48,52,56,127,122,60) THEN 'CASE WHEN ['+sc.name+'] is null THEN ''NULL'' ELSE '+'CONVERT(NVARCHAR(23),['+sc.name +'])'+' END'
                              ELSE '''NULL'''
                          END    AS col
                      ,sc.colid
                      ,sc.name
                  FROM syscolumns AS sc 
                  WHERE sc.id = object_id(@tablename) 
                  AND sc.xtype <>189 --xtype=189 'timestamp' 
                  AND sc.xtype <>34 --xtype=34 'image' 
                  AND sc.xtype <>35 --xtype= 35 'text'
                  AND (columnproperty(sc.id, sc.name, 'IsIdentity') = 0 OR @ignoreIdentityCol=0)
                  ) AS t 
          ORDER BY colid;
              
          SET @colsStr=left(@colsStr,len(@colsStr)-1)+') ';
          SET @valueStr1=left(@valueStr1,len(@valueStr1)-3)+')''';
      
          SELECT @sqlstr=@sqlstr+@colsStr+@valueStr1+' AS sql FROM '+@tablename +  ' WHERE 1=1 AND  ' + isnull(@con,'1=1');
      
          IF @isDebug=1
          BEGIN
              PRINT '1.columns string: '+ @colsStr;
              PRINT '2.values string: '+ @valueStr1
              PRINT '3.'+@sqlstr;
          END
      
          EXEC( @sqlstr);
          SET NOCOUNT OFF
      END
      GO

       

      示例

      下來,我舉一個(gè)例子幫大家理解如何使用它,假設(shè)在你的數(shù)據(jù)庫中有個(gè)表Country(國家),你想得到這個(gè)表中一些數(shù)據(jù)記錄的用于插入的SQL語句,記錄篩選條件是列continent_name(洲名)的值為North America的記錄。表的創(chuàng)建腳本如下:

      CREATE TABLE [dbo].[Country](
          [geoname_id] [varchar](50) NULL,
          [locale_code] [varchar](50) NULL,
          [continent_code] [varchar](50) NULL,
          [continent_name] [varchar](50) NULL,
          [country_iso_code] [varchar](50) NULL,
          [country_name] [varchar](50) NULL
      ) ON [PRIMARY]

      下來,通過調(diào)用你創(chuàng)建的存儲(chǔ)過程,用如下語句執(zhí)行以便產(chǎn)生你想要的SQL的插入(INSERT)語句。調(diào)用執(zhí)行腳本如下:

      exec sp_CreateInsertScript '[dbo].[Country]','[continent_name]=''North America'''

      執(zhí)行之后,你會(huì)得到你想要結(jié)果,下圖為我電腦的截圖。

      Image 1

      現(xiàn)在,你就可以拷貝這些結(jié)果或者通過右鍵菜單的選項(xiàng)保持輸出結(jié)果為一個(gè)查詢或者文本文件,以便你下來使用。Thanks!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多