pb9+SQLserver2k下通过
先建表A_Imp_Insert_Sql if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[A_Imp_Insert_Sql]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[A_Imp_Insert_Sql] GO
CREATE TABLE [dbo].[A_Imp_Insert_Sql] ( [insertsql] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [flag] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO
建存储过程proc_insert
CREATE proc proc_insert (@ls_server varchar(256),@ls_user varchar(20),@ls_pwd varchar(20),@tablename varchar(30),@ls_colName varchar(20),@ls_operator varchar(10),@str_bookid varchar(100)) as begin set nocount on declare @sqlstr varchar(8000) declare @sqlstr1 varchar(8000) declare @sqlstr2 varchar(8000)
--改为在pb中删除表. --exec( 'truncate table A_Imp_Insert_Sql') --insert into A_Imp_Insert_Sql --A_CLS_Temp if @tablename ='A_CLS_Temp' begin -- 单独处理了,特殊对待 select @sqlstr=' select ''insert ChineseLibraryClass ' end else begin select @sqlstr=' select ''insert '+@tablename end
-- 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 =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 )t order by colid Declare @sqlstr_B varchar(8000) select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' ,'''+@tablename+''' from '+@tablename
--select @sqlstr=@sqlstr+ ' where CATLRID='''+@str_bookid +'''' select @sqlstr=@sqlstr+ ' where '+@ls_colName+ @ls_operator+''''+@str_bookid +'''' -- --print @sqlstr select @sqlstr_B='insert into A_Imp_Insert_Sql(insertsql,flag) ('+@sqlstr+')' --print @sqlstr_B
--exec( @sqlstr) exec( @sqlstr_B) --导出为单独的存储过程 --Declare @bcpstr varchar(1000) --set @bcpstr = 'bcp bookonline_test..A_Imp_Insert_Sql' --set @bcpstr =@bcpstr +' out '+'c:\'+@tablename+'.TXT'+ ' -c -S'+@ls_server+' -U'+@ls_user+' -P'+@ls_pwd+'' --EXEC master..xp_cmdshell @bcpstr
set nocount off end GO
建存储过程proc_imp_text
CREATE PROCEDURE proc_imp_text (@ls_dbname varchar(50),@ls_server varchar(200),@ls_user varchar(200),@ls_pwd varchar(200),@ls_filepathname varchar(500),@ls_tabname varchar(50)) AS Declare @bcpstr varchar(1500) begin
set @bcpstr = 'bcp "select insertsql from '+@ls_dbname+'..A_Imp_Insert_Sql where flag='''+@ls_tabname+'''" queryout '+@ls_filepathname+ ' -w -S'+@ls_server+' -U'+@ls_user+' -P'+@ls_pwd+''
EXEC master..xp_cmdshell @bcpstr end
GO 不明处联系:[email protected] 
|