Image

Looking for suggestions to improve the following scripts:



I'm trying to make my job easier by generating code and then modifying it rather than writing it from scratch.

DROP PROC	sp_GenerateUpdateStatement
GO

CREATE PROC	sp_GenerateUpdateStatement
		@table		VARCHAR(100)

AS

DECLARE		@updatesql	VARCHAR(8000)
DECLARE		@valuessql	VARCHAR(8000)
DECLARE		@name		VARCHAR(100)
DECLARE		@ID		INT
DECLARE		@CRLF		CHAR(2)

SELECT		@CRLF = CHAR(13) + CHAR(10)

SELECT 		@updatesql = '		UPDATE 		' + @table + @crlf + '		SET' + @crlf

DECLARE 	mycursor INSENSITIVE CURSOR FOR
SELECT 		dbo.syscolumns.name
FROM		dbo.sysobjects,
		dbo.syscolumns,
		dbo.systypes
WHERE		dbo.syscolumns.xtype = dbo.systypes.xtype  
AND  		dbo.syscolumns.id = dbo.sysobjects.id
AND  		dbo.sysobjects.xtype = 'U'
AND		dbo.sysobjects.name = @table
AND  		dbo.sysobjects.xtype='U'
ORDER BY 	colorder

FOR READ ONLY

OPEN 		mycursor

FETCH NEXT FROM mycursor into @name
WHILE @@FETCH_STATUS = 0
BEGIN
		SELECT 		@updatesql = @updatesql + '				' + @name + 
		CASE
			WHEN LEN(@name) <= 7 THEN '				'
			WHEN LEN(@name) <= 15 THEN '			'
			WHEN LEN(@name) <= 16 THEN '		'
			WHEN LEN(@name) <= 22 THEN '		'
			ELSE '	'
		END
		+ ' = @' + @name + ', ' + @crlf
		FETCH NEXT FROM mycursor into @name
END

CLOSE 		mycursor
DEALLOCATE 	mycursor

SELECT		@updatesql = SUBSTRING(@updatesql, 1, LEN(@updatesql) - 4)

PRINT		@updatesql + @crlf + '		WHERE		1 = 1' + @crlf
GO

----------------

DROP PROC	sp_GenerateCursorCode
GO

CREATE PROC	sp_GenerateCursorCode
		@table		VARCHAR(100),
		@loopcommand	VARCHAR(8000) = '-- Do something here'

AS

DECLARE		@name		VARCHAR(100)
DECLARE		@sql		VARCHAR(8000)
DECLARE		@fetchnext	VARCHAR(8000)
DECLARE		@crlf		CHAR(2)

SELECT		@crlf 		= CHAR(13) + CHAR(10)

SELECT 		@sql 		= 'DECLARE ' + @table + '_cursor INSENSITIVE CURSOR FOR ' + @crlf + 'SELECT '
SELECT 		@fetchnext 	= 'FETCH NEXT FROM ' + @table + '_cursor INTO '

DECLARE 	mycursor INSENSITIVE CURSOR FOR
SELECT 		dbo.syscolumns.name
FROM		dbo.sysobjects,
		dbo.syscolumns,
		dbo.systypes
WHERE		dbo.syscolumns.xtype = dbo.systypes.xtype  
AND  		dbo.syscolumns.id = dbo.sysobjects.id
AND  		dbo.sysobjects.xtype = 'U'
AND		dbo.sysobjects.name = @table
AND  		dbo.sysobjects.xtype='U'
ORDER BY 	colorder
FOR READ ONLY

OPEN 		mycursor

FETCH NEXT FROM mycursor INTO @name
WHILE 		@@FETCH_STATUS = 0
BEGIN
		SELECT 		@sql 		= @sql + '		@' + @name + ', ' + @crlf
		SELECT 		@fetchnext 	= @fetchnext + '@' + @name + ', '
		FETCH NEXT FROM mycursor INTO @name
END

CLOSE 		mycursor
DEALLOCATE 	mycursor

SELECT		@sql = SUBSTRING(@sql, 1, LEN(@sql) - 4) + @crlf
SELECT		@fetchnext = SUBSTRING(@fetchnext, 1, LEN(@fetchnext) - 1) 
SELECT 		@sql = @sql + 'FROM 		' + @table + @crlf + 'FOR READ ONLY' + @crlf + @crlf + 'OPEN 		' + @table + '_cursor' + @crlf
SELECT		@sql = @sql + @crlf + @fetchnext + @crlf
SELECT		@sql = @sql + 'WHILE @@FETCH_STATUS = 0' + @crlf + 'BEGIN' + @crlf + '		' + @loopcommand + @crlf  
SELECT		@sql = @sql + '		' + @fetchnext + @crlf
SELECT		@sql = @sql +  'END' + @crlf + @crlf + 'CLOSE		' + @table + '_cursor' + @crlf + 'DEALLOCATE	' + @table + '_cursor' + @crlf

PRINT 		@sql + @crlf

---------------------------

DROP PROC	sp_GenerateInsertStatement
GO

CREATE PROC	sp_GenerateInsertStatement
		@table		VARCHAR(100)

AS

DECLARE		@insertsql	VARCHAR(8000)
DECLARE		@valuessql	VARCHAR(8000)
DECLARE		@name		VARCHAR(100)
DECLARE		@ID		INT
DECLARE		@CRLF		CHAR(2)

SELECT		@CRLF = CHAR(13) + CHAR(10)

SELECT 		@insertsql = '		INSERT 		' + @table + @crlf + '		(' + @crlf
SELECT 		@valuessql = '		VALUES ' + @crlf + '		(' + @crlf

DECLARE 	mycursor INSENSITIVE CURSOR FOR
SELECT 		dbo.syscolumns.name
FROM		dbo.sysobjects,
		dbo.syscolumns,
		dbo.systypes
WHERE		dbo.syscolumns.xtype = dbo.systypes.xtype  
AND  		dbo.syscolumns.id = dbo.sysobjects.id
AND  		dbo.sysobjects.xtype = 'U'
AND		dbo.sysobjects.name = @table
AND  		dbo.sysobjects.xtype='U'
ORDER BY 	colorder

FOR READ ONLY

OPEN 		mycursor

FETCH NEXT FROM mycursor into @name
WHILE @@FETCH_STATUS = 0
BEGIN
		SELECT 		@insertsql = @insertsql + '				' + @name + ', ' + @crlf
		SELECT 		@valuessql = @valuessql + '				@' + @name + ', ' + @crlf
		FETCH NEXT FROM mycursor into @name
END

CLOSE 		mycursor
DEALLOCATE 	mycursor

SELECT		@insertsql = SUBSTRING(@insertsql, 1, LEN(@insertsql) - 4)
SELECT		@valuessql = SUBSTRING(@valuessql, 1, LEN(@valuessql) - 4)
SELECT 		@insertsql = @insertsql + @crlf + '		)'
SELECT 		@valuessql = @valuessql + @crlf + '		)'

PRINT		@insertsql + @crlf + @valuessql

GO

--------------------------

DROP PROC	sp_GenerateVariableDeclarations
GO

CREATE PROC	sp_GenerateVariableDeclarations
			@table		VARCHAR(100)

AS

SET NOCOUNT ON

SELECT 		'DECLARE 	@' + dbo.syscolumns.name +
		CASE
			WHEN LEN(dbo.syscolumns.name) <= 6 THEN '				'
			WHEN LEN(dbo.syscolumns.name) <= 14 THEN '			'
			WHEN LEN(dbo.syscolumns.name) <= 16 THEN '		'
			WHEN LEN(dbo.syscolumns.name) <= 22 THEN '		'
			ELSE '	'
		END
		+
		UPPER(dbo.systypes.name) + 
		CASE
			WHEN PATINDEX('%char%',dbo.systypes.name) != 0 THEN '(' + cast(dbo.syscolumns.length AS VARCHAR(5)) + ')'
			ELSE ''
		END
FROM		dbo.sysobjects,
		dbo.syscolumns,
		dbo.systypes
WHERE		dbo.syscolumns.xtype = dbo.systypes.xtype  
AND  		dbo.syscolumns.id = dbo.sysobjects.id
AND  		dbo.sysobjects.xtype = 'U'
AND		dbo.sysobjects.name = @table
AND  		dbo.sysobjects.xtype='U'
ORDER BY 	colorder

GO




Any ideas?