Hi Friends,
This script Generates the insert statements for a particular table.
1. First run Execute script
2. Execute spInsertStatement '<TABLE_NAME>'
Thanks for reading it.
I M Waiting for ur valuable suggestions,
Thx
Vinay Kumar
Hi Friends,
This script Generates the insert statements for a particular table.
1. First run Execute script
2. Execute spInsertStatement '<TABLE_NAME>'
Thanks for reading it.
I M Waiting for ur valuable suggestions,
Thx
Vinay Kumar
IF EXISTS (SELECT 1 from sysobjects where name ='spInsertStatement' and xtype ='P')
DROP procedure spInsertStatement
GO
/*************************************************************************************************
Procedure Name :: spInsertStatement
Creadted by :: Vinay K
Purpose :: Genterate the insert statement for existing table
*************************************************************************************************/
Create procedure [dbo].[spInsertStatement]
@tbname varchar(200) = '' --- Table name
,@ISPRNExist bit = 0 ---- Print IF Exists statement
,@cehckCol varchar(500) = '' -- column which used in IF Exists statement
as
set nocount on
----Declare @tbname varchar(88)
----set @tbname ='employee_mas'
IF NOT EXISTS(Select 1 from sysobjects where name = @tbname and xtype = 'U')
BEGIN
print 'ENTER VALID TABLE NAME'
RETURN
END
IF NOT EXISTS(Select 1 from syscolumns where name = @cehckCol and id =object_id(@tbname)) and (@cehckCol!='')
BEGIN
print 'ENTER VALID COLUMN NAME'
RETURN
END
declare @str varchar(8000)
Declare @colstat bit
declare @colname varchar(200)
declare @colstring varchar(8000)
declare @Colvalue varchar(2000)
declare @fetch_status int
declare @insertstring varchar(8000)
declare @collen int
declare @inidcount int
Declare @maxinidcount int
set @colstring=''
set @colstat = 0
set @fetch_status=0
----------------------------------------
--if exists(select * from sysobjects where id=object_id(N'[dbo].[#tmptable]') and objectproperty(id,'ISTABLE')=1)
--drop table [dbo].[#tmptable]
set @str = '
/**********************************************************************************
Insert statements for Table :: '+ @tbname+'
**********************************************************************************/
'
print (@str)
if (select max(colstat) from syscolumns where id = object_id(@tbname)) = 1
set @colstat = 1
if (@colstat = 1)
BEGIN
print 'SET IDENTITY_INSERT ' +@tbname + ' on'
print 'GO'
END
--------- chose any one
--declare table #tmptable (colid int identity(1,1),colname varchar(200),colxtype int,coltype varchar(100),colstatus int)
--or
create table #tmptable
(
colid int identity(1,1),
colname varchar(200),
colxtype int,
coltype varchar(100),
colstatus int
)
--set @str='insert into #tmptable (colname,colxtype) select [name],[system_type_id] from sys.columns where [object_id]=object_id(N'''+'[dbo].[' +@tbname + ']'')'
--This statement for SQL 2000
--set @Str = ' insert into #tmptable (colname,colxtype,coltype) select sys.columns.[name],sys.columns.[system_type_id],sys.types.[name] from sys.columns left join sys.types on sys.columns.[system_type_id] = sys.types.[system_type_id] where [object_id]=object_id(N'''+'[dbo].[' +@tbname + ']'') and sys.types.system_type_id=sys.types.user_type_id and sys.types.system_type_id=sys.types.user_type_id and sys.columns.typestat=1'
-- This statement for SQL 2005
set @Str = ' insert into #tmptable (colname,colxtype,coltype)
select syscolumns.[name],syscolumns.[xtype],systypes.[name] from syscolumns left join systypes
on syscolumns.[xtype] = systypes.[xtype] where ID=object_id(N'''+'[dbo].[' +@tbname + ']'')
and systypes.[xtype]=systypes.xusertype
--and systypes.system_type_id=systypes.user_type_id
and systypes.[xtype] != 189
order by colid '
-- select sys.columns.[name],sys.columns.[system_type_id],sys.types.[name] from sys.columns left join sys.types on sys.columns.[system_type_id] = sys.types.[system_type_id] where [object_id]=object_id(N'''+'[dbo].[' +@tbname + ']'') and sys.types.system_type_id=sys.types.user_type_id and sys.types.system_type_id=sys.types.user_type_id and sys.types.user_type_id != 189
exec (@str)
--select * from #tmptable
--return
update #tmptable set colstatus=1 where colxtype in (58,61,99,165,167,173,175,231,239) --9
update #tmptable set colstatus=0 where colxtype in (34,35,36,48,52,56,59,60,62,98,104,106,108,122,127) --15
/*--------------------------------------------------------------------------
This cursor is used to get the column name from the #tmptable tables.
------------------------------Start Cursor----------------------------------*/
Declare @colstatus int
if (substring(@@version,29,1) = 9)
Declare @SelectStr varchar(max) -- For sql 2005
--if (substring(@@version,29,1) = 8)
-- Declare @SelectStr varchar(8000) -- For sql 2000
declare datatype cursor for select colname, colstatus from #tmptable
select @SelectStr = null
open datatype
fetch NEXT from datatype into @colname,@colstatus
while @@fetch_status = 0
begin
if @fetch_status=0
set @colstring =@colname
else
set @colstring = @colstring+','+@colname
if @colstatus = 1
-- set @SelectStr = isnull(@SelectStr,'') + ',' + '''' + @colname + ''''
set @SelectStr= case When @SelectStr is null then '' else @SelectStr + '+'',''+' end
+ '''''''''+ ' + 'cast(ISNULL(' + @colname + ',0) as varchar(250)) ' + '+'''''''''
else
--set @SelectStr = isnull(@SelectStr,'') + ',' + @colname
set @SelectStr = case When @SelectStr is null then '' else @SelectStr + '+'',''+' end
+ 'cast (ISNULL(' + @colname + ',0) as varchar(250)) '
--print '@selectstr='+ @selectstr
fetch NEXT from datatype into @colname,@colstatus
set @fetch_status=1
end
close datatype
deallocate datatype
/*---End Cursor---*/
--set @insert_string = 'insert into '+ @tbname + ' ( ' + @colstring + ')' + ' values ('
--print @insert_string
--set @SelectStr = 'Select ' + @SelectStr + ' From ' + @tbname
if exists(select * from sysobjects where id=object_id(N'[dbo].[TMPSELTABLE]') and objectproperty(id,'ISTABLE')=1)
drop table [dbo].[TMPSELTABLE]
create table TMPSELTABLE (inid int identity(1,1), SelStr varchar(MAX))
if exists(select * from sysobjects where id=object_id(N'[dbo].[TM]') and objectproperty(id,'ISTABLE')=1)
drop table [dbo].[TM]
set @SelectStr = 'Select ' +@SelectStr + ' as Sel into TM From ' + @tbname
exec (@SelectStr)
insert into TMPSELTABLE (SelStr) select Sel from TM
if (@cehckCol= '' )
BEGIN
if (@colstat = 1)
select @cehckCol = name from syscolumns where id =Object_id(@tbname) and colstat = 1
END
else
BEGIN
select @cehckCol from syscolumns where id =Object_id(@tbname) and colid =
(select top 1 min(colid) from syscolumns where id =Object_id(@tbname) group by colid )
END
------------------- cursor that's show the insert statement ---------------
set @inidcount = 1
select @maxinidcount = max(inid) from TMPSELTABLE
while (@inidcount <= @maxinidcount)
BEGIN
update TMPSELTABLE set SelStr = replace((replace((replace(substring(selstr,1,len(selstr)-1),'''','''''')),',''''',',''')),''''',',''',')+'''' where inid = @inidcount
set @str = ''
select @insertstring = SelStr ,@colvalue = substring(selstr,1,patindex('%,%',selstr) -1 ) from TMPSELTABLE Where inid = @inidcount
IF (@ISPRNExist = 1)
BEGIN
set @str = 'IF NOT EXISTS (Select 1 from '+ @tbname + ' where '+@cehckCol+' = '+ @Colvalue +')'
-- set @str ='TESTING'
END
set @str = @str+'
insert into '+ @tbname + ' (' + @colstring + ')' + '
values ('+@insertstring + ')
'
print (@str)
Set @inidcount = @inidcount + 1
END
drop table #tmptable
drop table TMPSELTABLE
--drop table #colstring
--------------------------- OK
IF (@colstat = 1)
BEGIN
print 'GO'
print 'SET IDENTITY_INSERT ' +@tbname + ' off'
print 'GO'
END
set nocount off
------@tbname varchar(200) = '' --- Table name
------@ISPRNExist bit = o ---- Print IF Exists statement
------@cehckCol varchar(500) = '' -- column which used in IF Exists statement
----Execute spInsertStatement 'Employee'