In response to: Dynamic SQL INSERT Generator Unleashed!

Comment from: Alfredo
Alfredo

Great code!
I have only made a little modification to avoid errors with reserved words used in field names or field names with spaces. I have added this to the field names:[FieldName]

This is your code with my modifications:

create table #tmp (
SQLText varchar(8000) )

create table #tmp2 (
Id int identity,
SQLText varchar(8000) )

set nocount on

delete #tmp
delete #tmp2

declare @vsSQL varchar(8000),
@vsCols varchar(8000),
@vsTableName varchar(40)

declare csrTables cursor for
select name
from sysobjects
where type in (’u')
and name like ‘AMEX%’
order by name

open csrTables
fetch next from csrTables into @vsTableName

while (@@fetch_status = 0)
begin

select @vsSQL = ‘’,
@vsCols = ‘’
select @vsSQL = @vsSQL +
CASE when sc.type in (39,47,61,111) then
‘”””'’+’ + ‘isnull(rtrim(replace([’+ sc.name + ‘],”””'’,”””””'’)),”'’)’ + ‘+””'’,'’+’
when sc.type = 35 then
‘”””'’+’ + ‘isnull(rtrim(replace(substring([’+ sc.name + ‘],1,1000),”””'’,”””””'’)),”'’)’ + ‘+””'’,'’+’
else
‘isnull(convert(varchar,[’ + sc.name + ‘]),'’null'’)+'’,'’+’
end
from syscolumns sc
where sc.id = object_id(@vsTableName)
order by ColID

select @vsCols = @vsCols + quotename(sc.name,’[') + ‘,’
from syscolumns sc
where sc.id = object_id(@vsTableName)
order by ColID

select @vsSQL = substring(@vsSQL,1,datalength(@vsSQL)-1)

select @vsCols = substring(@vsCols,1,datalength(@vsCols)-1)

insert #tmp
exec (’select ‘ + @vsSQL + ‘ from ‘ + @vsTableName)

update #tmp
set sqltext = ‘insert ‘ + @vsTableName + ‘(’ + @vsCols + ‘) values(’ + substring(sqltext,1,datalength(sqltext)-1) + ‘)’

insert #tmp2
select ‘DELETE from ‘ + @vsTableName

insert #tmp2 values (’GO’)

if (select count(id) from syscolumns where id = object_id(@vsTableName) and ((status & 128) = 128) ) = 1
begin
insert #tmp2
select ’set identity_insert ‘ + @vsTableName + ‘ on’
end

insert #tmp2
select * from #tmp

if (select count(id) from syscolumns where id = object_id(@vsTableName) and ((status & 128) = 128) ) = 1
begin
insert #tmp2
select ’set identity_insert ‘ + @vsTableName + ‘ off’
end

insert #tmp2 values (’GO’)

insert #tmp2
select ‘update statistics ‘ + @vsTableName

insert #tmp2 values (’GO’)

delete #tmp

fetch next from csrTables into @vsTableName

end

close csrTables
deallocate csrTables

update #tmp2
set sqltext = substring(sqltext,1,charindex(’,)’,sqltext)-1) + ‘,NULL)’
where not(charindex(’,)’,sqltext) = 0)

update #tmp2
set sqltext = replace(sqltext, ‘,””’,',null’)
where not (charindex(’,””’,sqltext) = 0)

update #tmp2
set sqltext = replace(sqltext, ‘(””’,',null’)
where not (charindex(’(””’,sqltext) = 0)

set nocount off

select sqltext from #tmp2 order by id

go

drop table #tmp
drop table #tmp2

05/23/06 @ 05:30

In response to: Dynamic T-SQL in Just Minutes!

Scott

Try www.sqlscripter.com to generate your scripts. This tool supports all commands (Insert+Update+Delete).
Its free of charge.

01/24/06 @ 11:30

In response to: Dynamic SQL INSERT Generator Unleashed!

Comment from:
Mark

Thanks for the feedback Qamar. Since I run this as an administrator, I’m not particularly worried about injection. Are you referring to overruns on data fields, buffer overruns?

Mark

01/19/06 @ 07:53

In response to: Dynamic SQL INSERT Generator Unleashed!

Comment from: Qamar hafeezi
Qamar hafeezi

Nice statement. I have been using another one but it crashes on heavy data tables. The performance of the script is not good but it generates correct statements.
One more thing, did u check sql injection in ur query?
thx
Qamar

01/19/06 @ 05:56

In response to: Dynamic T-SQL in Just Minutes!

Comment from: andrew krenitz
andrew krenitz

Hi,

How would you write the code to update a table.

sql = ‘update #table set’+@col+’= ‘+@var+’where colname =’+@val

exec sql

will this work ?

08/23/05 @ 22:00

In response to: Excellent Consultants...or Why Technology Kingdoms Rise and Fall

Comment from:
wayne

Great post Mark!

02/21/05 @ 10:49

In response to: Dynamic SQL INSERT Generator Unleashed!

Wayne Allen's Weblog

Extracting Column Names for a Table in SQL as a CSV String

02/18/05 @ 09:25

In response to: Dynamic SQL INSERT Generator Unleashed!

Wayne Allen's Weblog

Extracting Column Name for a Table in SQL as a CSV String

02/18/05 @ 08:41

In response to: Dynamic SQL INSERT Generator Unleashed!

Comment from:
iclemartin

Jerrad Anderson (http://www.jerradanderson.com/) left a comment on http://weblogs.asp.net/wallen/archive/2005/02/09/370080.aspx

—-

I have a nice set of scripts here that also demonstrate sql creating sql.

http://www.jerradanderson.com/index.php?sectionId=17&pageId=28 Remove Comment 370435

02/10/05 @ 11:44

In response to: Dynamic SQL INSERT Generator Unleashed!

Comment from: msngan
msngan

Can you list some of the sample output please?

02/09/05 @ 16:52

In response to: Dynamic SQL INSERT Generator Unleashed!

Wayne Allen's Weblog

Dynamic SQL INSERT Generator Unleashed!

02/09/05 @ 14:54

In response to: Dynamic SQL INSERT Generator Unleashed!

David Walker

Great Job again!

I only had to make a minor change on one of my tables. I had to add [ ] around the field name, because it was named Key.

Thanks again!

02/09/05 @ 10:37

In response to: Dynamic T-SQL in Just Minutes!

Comment from:
Mark

Thanks David and Gregor for the positive feedback.

The purpose of this post was to give primer on the system tables as well as Dynamic SQL for novice to intermediate users. The next post should provide a solid tool for advanced users as well.

–Mark

02/07/05 @ 22:27

In response to: Dynamic T-SQL in Just Minutes!

David Walker

Great article!

Really looking forward to the next one though! As the previous commentor mentioned, the CREATE TABLE scripts are reasonably easy to come by. But a full script for INSERT is definitely going to be interesting to see!

Thanks again!

02/07/05 @ 12:56

In response to: Dynamic T-SQL in Just Minutes!

Comment from: gregor suttie
gregor suttie

If you press ctrl-c on a table or stored proc and then do ctrl-v into notepad or any other program such as query anaylser youll get the full create sql as well.

Cheers
Gregor

02/01/05 @ 08:50

In response to: Dynamic T-SQL in Just Minutes!

Wayne Allen's Weblog

Writing SQL with SQL

02/01/05 @ 07:47