/*
15.5/EBF 17340 SMP/P/x86_64/Enterprise Linux/ase155/2391/64-bit/OPT/Mon Nov  9 14:15:35 2009

Confidential property of Sybase, Inc.
Copyright 1987, 2009
Sybase, Inc.  All rights reserved.
Unpublished rights reserved under U.S. copyright laws.

This software contains confidential and trade secret information of Sybase,
Inc.   Use,  duplication or disclosure of the software and documentation by
the  U.S.  Government  is  subject  to  restrictions set forth in a license
agreement  between  the  Government  and  Sybase,  Inc.  or  other  written
agreement  specifying  the  Government's rights to use the software and any
applicable FAR provisions, for example, FAR 52.227-19.
Sybase, Inc. One Sybase Drive, Dublin, CA 94568, USA
*/
use master
go
if exists (select *
	from sysobjects
		where name = 'sp_configure')
begin
	execute sp_configure "allow updates", 1
end
reconfigure with override
go
if exists (select *
	from sysobjects
		where sysstat & 7 = 4
			and name = 'sp_instmsg')
begin
	print "Dropping sp_instmsg"
	drop procedure sp_instmsg
end
go

if exists (select *
	from sysobjects
		where sysstat & 7 = 4
			and name = 'sp_checkreswords')
begin
	print "Dropping sp_checkreswords"
	drop procedure sp_checkreswords
end
go

if ((select db_name()) = "master") 
	dump tran master with truncate_only
else
    if ((select db_name()) = "sybsystemprocs") 
	dump tran sybsystemprocs with truncate_only
    else
        if ((select db_name()) = "dbccdb") 
	    dump tran dbccdb with truncate_only
        else
            if ((select db_name()) = "dbccalt") 
	        dump tran dbccalt with truncate_only
go

use master
go
/* Sccsid = "%Z% generic/sproc/src/%M% %I% %G%" */

/*
** NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! 
**
** Make sure to add the new reserved word in both conditional 
**       compile blocks. 
**
** The UPGRADE conditional block is used to install
** 	  things in previous version of the server that is getting upgraded
**	  Do not add any new specific column info in that block
*/

/*
** Any new reserved word can be added at the end. Trying to keep the reserved
** words in alphabetical order is a maintenance nightmare.
*/
use master
go

delete spt_values
	where type = "W"
go

/*
** All the ASE keywords are inserted here. The ansi_w can have the values
** 0 or > 0. The value 0 indicates that the keyword is an ASE specific 
** keywords and it is not a standard SQL92 keywords. 
** The value 1 indicates that the keywords is an SQL92 keywords. 
** For the future, the values > 1 indicate that the keyword is part of 
** SQL99 and above keywords.
**
**	  
*/


insert spt_values (name, number, type)  values ("add",   1 , "W")
insert spt_values (name, number, type) values ("all",   2 , "W")
insert spt_values (name, number, type) values ("alter",   3 , "W")
insert spt_values (name, number, type) values ("and",   4 , "W")
insert spt_values (name, number, type) values ("any",   5 , "W")
insert spt_values (name, number, type) values ("arith_overflow",   6 , "W")
insert spt_values (name, number, type) values ("as",   7 , "W")
insert spt_values (name, number, type) values ("asc",   8 , "W")
insert spt_values (name, number, type) values ("at",   9 , "W")
insert spt_values (name, number, type) values ("authorization",  10 , "W")
insert spt_values (name, number, type) values ("avg",  11 , "W")
insert spt_values (name, number, type) values ("begin",  12 , "W")
insert spt_values (name, number, type) values ("between",  13 , "W")
insert spt_values (name, number, type) values ("break",  14 , "W")
insert spt_values (name, number, type) values ("browse",  15 , "W")
insert spt_values (name, number, type) values ("bulk",  16 , "W")
insert spt_values (name, number, type) values ("by",  17 , "W")
insert spt_values (name, number, type) values ("cascade",  18 , "W")
insert spt_values (name, number, type) values ("case",  19 , "W")
insert spt_values (name, number, type) values ("char_convert",  20 , "W")
insert spt_values (name, number, type) values ("check",  21 , "W")
insert spt_values (name, number, type) values ("checkpoint",  22 , "W")
go
insert spt_values (name, number, type) values ("close",  23 , "W")
insert spt_values (name, number, type) values ("clustered",  24 , "W")
insert spt_values (name, number, type) values ("coalesce",  25 , "W")
insert spt_values (name, number, type) values ("commit",  26 , "W")
insert spt_values (name, number, type) values ("compute",  27 , "W")
insert spt_values (name, number, type) values ("confirm",  28 , "W")
insert spt_values (name, number, type) values ("connect",  29 , "W")
insert spt_values (name, number, type) values ("constraint",  30 , "W")
insert spt_values (name, number, type) values ("continue",  31 , "W")
insert spt_values (name, number, type) values ("controlrow",  32 , "W")
insert spt_values (name, number, type) values ("convert",  33 , "W")
insert spt_values (name, number, type) values ("count",  34 , "W")
insert spt_values (name, number, type) values ("create",  35 , "W")
insert spt_values (name, number, type) values ("current",  36 , "W")
insert spt_values (name, number, type) values ("cursor",  37 , "W")
insert spt_values (name, number, type) values ("proxy_table",  38 , "W")
insert spt_values (name, number, type) values ("database",  39 , "W")
insert spt_values (name, number, type) values ("dbcc",  40 , "W")
insert spt_values (name, number, type) values ("deallocate",  41 , "W")
insert spt_values (name, number, type) values ("declare",  42 , "W")
insert spt_values (name, number, type) values ("default",  43 , "W")
insert spt_values (name, number, type) values ("delete",  44 , "W")
go
insert spt_values (name, number, type) values ("desc",  45 , "W")
insert spt_values (name, number, type) values ("disk",  46 , "W")
insert spt_values (name, number, type) values ("distinct",  47 , "W")
insert spt_values (name, number, type) values ("drop",  49 , "W")
insert spt_values (name, number, type) values ("dummy",  50 , "W")
insert spt_values (name, number, type) values ("dump",  51 , "W")
insert spt_values (name, number, type) values ("else",  52 , "W")
insert spt_values (name, number, type) values ("end",  53 , "W")
insert spt_values (name, number, type) values ("endtran",  54 , "W")
insert spt_values (name, number, type) values ("errlvl",  55 , "W")
insert spt_values (name, number, type) values ("errordata",  56 , "W")
insert spt_values (name, number, type) values ("errorexit",  57 , "W")
insert spt_values (name, number, type) values ("escape",  58 , "W")
insert spt_values (name, number, type) values ("except",  59 , "W")
insert spt_values (name, number, type) values ("exclusive",  60 , "W")
insert spt_values (name, number, type) values ("exec",  61 , "W")
insert spt_values (name, number, type) values ("execute",  62 , "W")
insert spt_values (name, number, type) values ("exists",  63 , "W")
insert spt_values (name, number, type) values ("exit",  64 , "W")
insert spt_values (name, number, type) values ("exp_row_size", 65, "W")
insert spt_values (name, number, type) values ("external",  66 , "W")
go
insert spt_values (name, number, type) values ("fetch",  67 , "W")
insert spt_values (name, number, type) values ("fillfactor",  68 , "W")
insert spt_values (name, number, type) values ("for",  69 , "W")
insert spt_values (name, number, type) values ("foreign",  70 , "W")
insert spt_values (name, number, type) values ("from",  71 , "W")
insert spt_values (name, number, type) values ("goto",  72 , "W")
insert spt_values (name, number, type) values ("grant",  73 , "W")
insert spt_values (name, number, type) values ("group",  74 , "W")
insert spt_values (name, number, type) values ("having",  75 , "W")
insert spt_values (name, number, type) values ("holdlock",  76 , "W")
insert spt_values (name, number, type) values ("identity",  77 , "W")
insert spt_values (name, number, type) values ("identity_start",  79 , "W")
insert spt_values (name, number, type) values ("identity_gap", 104 , "W")
insert spt_values (name, number, type) values ("if",  80 , "W")
insert spt_values (name, number, type) values ("in",  81 , "W")
insert spt_values (name, number, type) values ("index",  82 , "W")
insert spt_values (name, number, type) values ("insert",  83 , "W")
insert spt_values (name, number, type) values ("install",  84 , "W")
insert spt_values (name, number, type) values ("intersect",  85 , "W")
insert spt_values (name, number, type) values ("into",  86 , "W")
insert spt_values (name, number, type) values ("is",  87 , "W")
insert spt_values (name, number, type) values ("isolation",  88 , "W")
go
insert spt_values (name, number, type) values ("jar",  89 , "W")
insert spt_values (name, number, type) values ("join",  90 , "W")
insert spt_values (name, number, type) values ("key",  91 , "W")
insert spt_values (name, number, type) values ("kill",  92 , "W")
insert spt_values (name, number, type) values ("level",  93 , "W")
insert spt_values (name, number, type) values ("like",  94 , "W")
insert spt_values (name, number, type) values ("lineno",  95 , "W")
insert spt_values (name, number, type) values ("load",  96 , "W")
insert spt_values (name, number, type) values ("lock", 97, "W")
insert spt_values (name, number, type) values ("max",  98 , "W")
insert spt_values (name, number, type) values ("max_rows_per_page",  99 , "W")
insert spt_values (name, number, type) values ("min",  100 , "W")
insert spt_values (name, number, type) values ("mirror",  101 , "W")
insert spt_values (name, number, type) values ("mirrorexit",  102 , "W")
insert spt_values (name, number, type) values ("national",  103 , "W")
insert spt_values (name, number, type) values ("noholdlock",  105 , "W")
insert spt_values (name, number, type) values ("nonclustered",  106 , "W")
insert spt_values (name, number, type) values ("not",  107 , "W")
insert spt_values (name, number, type) values ("null",  108 , "W")
insert spt_values (name, number, type) values ("nullif",  109 , "W")
insert spt_values (name, number, type) values ("numeric_truncation",  110 , "W")
insert spt_values (name, number, type) values ("of",  111 , "W")
go
insert spt_values (name, number, type) values ("off",  112 , "W")
insert spt_values (name, number, type) values ("offsets",  113 , "W")
insert spt_values (name, number, type) values ("on",  114 , "W")
insert spt_values (name, number, type) values ("once", 115 , "W")
insert spt_values (name, number, type) values ("online",  116 , "W")
insert spt_values (name, number, type) values ("only", 117 , "W")
insert spt_values (name, number, type) values ("open", 118 , "W")
insert spt_values (name, number, type) values ("option", 119 , "W")
insert spt_values (name, number, type) values ("or", 120 , "W")
insert spt_values (name, number, type) values ("order", 121 , "W")
insert spt_values (name, number, type) values ("over", 122 , "W")
insert spt_values (name, number, type) values ("partition", 123 , "W")
insert spt_values (name, number, type) values ("perm", 124 , "W")
insert spt_values (name, number, type) values ("permanent", 125 , "W")
insert spt_values (name, number, type) values ("plan", 126 , "W")
insert spt_values (name, number, type) values ("prepare", 128 , "W")
insert spt_values (name, number, type) values ("primary", 129 , "W")
insert spt_values (name, number, type) values ("print", 130 , "W")
insert spt_values (name, number, type) values ("privileges", 131 , "W")
insert spt_values (name, number, type) values ("proc", 132 , "W")
insert spt_values (name, number, type) values ("procedure", 133 , "W")
go
insert spt_values (name, number, type) values ("processexit", 134 , "W")
insert spt_values (name, number, type) values ("public", 135 , "W")
insert spt_values (name, number, type) values ("raiserror", 136 , "W")
insert spt_values (name, number, type) values ("read", 137 , "W")
insert spt_values (name, number, type) values ("readpast", 138, "W")
insert spt_values (name, number, type) values ("readtext", 139 , "W")
insert spt_values (name, number, type) values ("reconfigure", 140 , "W")
insert spt_values (name, number, type) values ("references", 141 , "W")
insert spt_values (name, number, type) values ("remove", 142 , "W")
insert spt_values (name, number, type) values ("reorg", 143 , "W")
insert spt_values (name, number, type) values ("replace", 144 , "W")
insert spt_values (name, number, type) values ("quiesce", 145 , "W")
insert spt_values (name, number, type) values ("reservepagegap", 146, "W")
insert spt_values (name, number, type) values ("return", 147 , "W")
insert spt_values (name, number, type) values ("revoke", 148 , "W")
insert spt_values (name, number, type) values ("role", 149 , "W")
insert spt_values (name, number, type) values ("rollback", 150 , "W")
insert spt_values (name, number, type) values ("rowcount", 151 , "W")
insert spt_values (name, number, type) values ("rows", 152 , "W")
insert spt_values (name, number, type) values ("rule", 153 , "W")
insert spt_values (name, number, type) values ("save", 154 , "W")
insert spt_values (name, number, type) values ("schema", 155 , "W")
go
insert spt_values (name, number, type) values ("select", 156 , "W")
insert spt_values (name, number, type) values ("set", 157 , "W")
insert spt_values (name, number, type) values ("setuser", 158 , "W")
insert spt_values (name, number, type) values ("shared", 159 , "W")
insert spt_values (name, number, type) values ("shutdown", 160 , "W")
insert spt_values (name, number, type) values ("some", 161 , "W")
insert spt_values (name, number, type) values ("statistics", 162 , "W")
insert spt_values (name, number, type) values ("stripe", 163 , "W")
insert spt_values (name, number, type) values ("sum", 164 , "W")
insert spt_values (name, number, type) values ("syb_identity", 165 , "W")
insert spt_values (name, number, type) values ("syb_restree", 166 , "W")
insert spt_values (name, number, type) values ("syb_terminate", 167 , "W")
insert spt_values (name, number, type) values ("table", 168 , "W")
insert spt_values (name, number, type) values ("temp", 169 , "W")
insert spt_values (name, number, type) values ("temporary", 170 , "W")
insert spt_values (name, number, type) values ("textsize", 171 , "W")
insert spt_values (name, number, type) values ("to", 172 , "W")
insert spt_values (name, number, type) values ("tran", 173 , "W")
insert spt_values (name, number, type) values ("transaction", 174 , "W")
insert spt_values (name, number, type) values ("trigger", 175 , "W")
insert spt_values (name, number, type) values ("truncate", 176 , "W")
insert spt_values (name, number, type) values ("tsequal", 177 , "W")
go
insert spt_values (name, number, type) values ("union", 178 , "W")
insert spt_values (name, number, type) values ("unique", 179 , "W")
insert spt_values (name, number, type) values ("unpartition", 180 , "W")
insert spt_values (name, number, type) values ("update", 181 , "W")
insert spt_values (name, number, type) values ("use", 182 , "W")
insert spt_values (name, number, type) values ("replication", 183 , "W")
insert spt_values (name, number, type) values ("user", 184 , "W")
insert spt_values (name, number, type) values ("user_option", 185 , "W")
insert spt_values (name, number, type) values ("using", 186 , "W")
insert spt_values (name, number, type) values ("values", 187 , "W")
insert spt_values (name, number, type) values ("varying", 188 , "W")
insert spt_values (name, number, type) values ("view", 189 , "W")
insert spt_values (name, number, type) values ("waitfor", 190 , "W")
insert spt_values (name, number, type) values ("when", 191 , "W")
insert spt_values (name, number, type) values ("where", 192 , "W")
insert spt_values (name, number, type) values ("while", 193 , "W")
insert spt_values (name, number, type) values ("with", 194 , "W")
insert spt_values (name, number, type) values ("work", 195 , "W")
insert spt_values (name, number, type) values ("writetext", 196 , "W")
insert spt_values (name, number, type) values ("modify", 197 , "W")
insert spt_values (name, number, type) values ("deterministic", 198 , "W")
go
insert spt_values (name, number, type) values ("inout", 201 , "W")
insert spt_values (name, number, type) values ("out", 203 , "W")
insert spt_values (name, number, type) values ("output", 204 , "W")
insert spt_values (name, number, type) values ("returns", 205 , "W")
insert spt_values (name, number, type) values ("stringsize", 206 , "W")
insert spt_values (name, number, type) values ("xmltest", 207, "W")
insert spt_values (name, number, type) values ("xmlextract", 208, "W")
insert spt_values (name, number, type) values ("xmlparse", 209, "W")
insert spt_values (name, number, type) values ("encrypt", 210, "W")
insert spt_values (name, number, type) values ("decrypt", 211, "W")
insert spt_values (name, number, type) values ("materialized", 212, "W")
insert spt_values (name, number, type) values ("count_big", 213, "W")
insert spt_values (name, number, type) values ("tracefile", 214, "W")
insert spt_values (name, number, type) values ("scroll", 215, "W")
insert spt_values (name, number, type) values ("decrypt_default", 216, "W")
insert spt_values (name, number, type) values ("insensitive", 217, "W")
insert spt_values (name, number, type) values ("semi_sensitive", 218, "W")
insert spt_values (name, number, type) values ("xmltable", 219, "W")
go

go
go
if exists (select *
	from sysobjects
		where sysstat & 7 = 4
			and name = 'sp_instmsg')
begin
	drop procedure sp_instmsg
end
go
print "Installing sp_instmsg"
go

/* Sccsid = "%Z% generic/sproc/src/%M% %I% %G%" */

/*
**  These messages go into the installupgrade script, which is loaded into
**  the prior Server release as part of the upgrade process.
**
**  Note: message lengths are conditionally defined should this
**  procedure ever be used outside of the upgrade process.
*/
create procedure sp_instmsg
	@msg_num	int,

	@msg_text	varchar(255)

as


	declare @description varchar(255)


	select @description = description from sysmessages where
		error = @msg_num and langid is null

	if @description = @msg_text
		return 1

	if @description is not null
		delete sysmessages where error = @msg_num

	if @msg_text is null
		return 2

	/* Note: this version of sp_instmsg works on 4.x and 10.0 */
	insert sysmessages (error, severity, dlevel, description, langid)
		values (@msg_num, 0, 0, @msg_text, null)

	return 0
go

/*
** Messages for "sp_checkreswords"	18035	
*/
exec sp_instmsg 17232, "No user with the specified name exists in the current database."

exec sp_instmsg 18035, "Reserved Words Used as Database Object Names for Database,"
exec sp_instmsg 18036, " Upgrade renames sysobjects.schema to sysobjects.schemacnt."
exec sp_instmsg 18037, " Found no reserved words used as names for database-wide objects."
exec sp_instmsg 18038, " Found no reserved words used as database object names."
go

drop procedure sp_instmsg
go
if exists (select *
	from sysobjects
		where sysstat & 7 = 4
			and name = 'sp_checkreswords')
begin
	drop procedure sp_checkreswords
end
go
print "Installing sp_checkreswords"
go

/* Sccsid = "%Z% generic/sproc/src/%M% %I% %G%" */

if exists (select name from sysobjects where name = "sp_checkreswords")
	drop proc sp_checkreswords
go
/*
**Messages for "sp_checkreswords"	18035
**
** 17232, "No user with the specified name exists in the current database."
** 18035, "Reserved Words Used as Database Object Names for Database, "
** 18036, " Upgrade renames sysobjects.schema to sysobjects.schemacnt."
** 18037, " Found no reserved words used as names for database-wide objects."
** 18038, " Found no reserved words used as database object names."
*/
create procedure sp_checkreswords 
@user_name_param	varchar(30) = NULL
as


declare @msg		varchar(255)

declare @baduse_cnt	int		/* Return the count of items that */
					/* have reserved word names.	  */
declare @owner_cnt	int		/* Count of owner-based bad items */

declare @uid_param	int
declare @user_name	varchar(30)
declare @dbname		varchar(30)
declare	@uid		int

/*
** Note: do not set isolation level, because this sproc must run in
** 4.x as well as System 10.
**
** Also, do not call sp_getmessage since this sproc must run on 4.8
** which cannot support the '%1!' syntax in the print statement.
** The main side affect of this is that the messages printed out by
** this sproc are not localized.
*/

set nocount on

/*
** 18035, "Reserved Words Used as Database Object Names for Database, "
**
** NOTE:  sp_getmessage is not used for retrieving message text
** because this sproc must also run on 4.8 servers which cannot
** support the '%1!' syntax in the print statement.
*/
select @dbname = db_name()
select @msg = description from master.dbo.sysmessages
        where error = 18035
        and langid is NULL
select @msg = @msg + @dbname + "."
print @msg
print ""

select @baduse_cnt = 0

create table #uids
(
	uid		int NULL,
	catagory	char(1)
)

if (@user_name_param is NULL or @user_name_param = "dbo")
begin
	/*
	** 18036, " Upgrade renames sysobjects schema to sysobjects schemacnt."
	**
	** NOTE:  sp_getmessage is not used for retrieving message text
	** because this sproc must also run on 4.8 servers which cannot
	** support the '%1!' syntax in the print statement.
	*/
	select @msg = description from master.dbo.sysmessages
        	where error = 18036
        	and langid is NULL
	print @msg
	print ""
end

if (@user_name_param is not NULL)
begin
	select @uid_param = user_id(@user_name_param)
	if (@uid_param is NULL)
	begin
		/*
		** 17232, "No user with the specified name exists in the 
		**	   current database."
		**
		** NOTE:  sp_getmessage is not used for retrieving message text
		** because this sproc must also run on 4.8 servers which cannot
		** support the '%1!' syntax in the print statement.
		*/
		select @msg = description from master.dbo.sysmessages
        		where error = 17232
        		and langid is NULL
		print @msg
		return(0)
	end

	insert #uids 
		select o.uid, "c"
		from sysobjects o, master.dbo.spt_values v, syscolumns c
		where lower(c.name) = v.name and v.type = 'W' 
			and c.id = o.id 
			and o.uid = @uid_param
			and not (o.id  = 1 and c.name = "schema")
		group by o.uid
		order by o.uid

	insert #uids 
		select o.uid, "i"
		from sysobjects o, master.dbo.spt_values v, sysindexes i
		where lower(i.name) = v.name and v.type = 'W' 
			and i.id = o.id 
			and o.uid = @uid_param
			and i.indid != 0 and i.indid != 255
		group by o.uid
		order by o.uid

	insert #uids
		select o.uid, "o"
		from sysobjects o, master.dbo.spt_values v
		where lower(o.name) = v.name and v.type = 'W'  
			and o.uid = @uid_param
		group by o.uid
		order by o.uid

	insert #uids
		select t.uid, "t"
		from systypes t, master.dbo.spt_values v
		where lower(t.name) = v.name and v.type = 'W'  
			and t.uid = @uid_param
		group by t.uid
		order by t.uid
end
else
begin
	/*
	** Get the uids into a temp table.
	*/

	insert #uids 
		select o.uid, "c"
		from sysobjects o, master.dbo.spt_values v, syscolumns c
		where lower(c.name) = v.name and v.type = 'W' 
			and c.id = o.id 
			and not (o.id  = 1 and c.name = "schema")
		group by o.uid
		order by o.uid

	insert #uids 
		select o.uid, "i"
		from sysobjects o, master.dbo.spt_values v, sysindexes i
		where lower(i.name) = v.name and v.type = 'W' 
			and i.id = o.id 
			and i.indid != 0 and i.indid != 255
		group by o.uid
		order by o.uid

	insert #uids
		select o.uid, "o"
		from sysobjects o, master.dbo.spt_values v
		where lower(o.name) = v.name and v.type = 'W'  
		group by o.uid
		order by o.uid

	insert #uids
		select t.uid, "t"
		from systypes t, master.dbo.spt_values v
		where lower(t.name) = v.name and v.type = 'W'  
		group by t.uid
		order by t.uid
end

/* Not using cursors because this sproc must run in 4.x, in order for 
** clients to check their databases before upgrade.
*/

select @user_name = min(user_name(uid)) from #uids

while (@user_name is not NULL)
begin
	/* Print the owner-specific information:
	**    columns, indexes, objects(tables, sprocs, etc.), and datatypes
	*/

	select @uid = user_id(@user_name)
	select "Owner" = @user_name 

	if exists (select * from #uids
		where user_name(uid) = @user_name and catagory = "c")
	begin
		select "Table" = o.name,
			"Reserved Word Column Names " = c.name
		from sysobjects o, master.dbo.spt_values v, syscolumns c
		where lower(c.name) = v.name and v.type = 'W'
			and c.id = o.id
			and o.uid = @uid
			and not (o.id  = 1 and c.name = "schema")
		order by o.name, c.name

		select @baduse_cnt = @baduse_cnt + @@rowcount
	end

	if exists (select * from #uids
		where user_name(uid) = @user_name and catagory = "i")
	begin
		select "Table" = o.name,
			"Reserved Word Index Names" = i.name
		from sysobjects o, master.dbo.spt_values v, sysindexes i
		where lower(i.name) = v.name and v.type = 'W'
			and i.id = o.id
			and o.uid = @uid
			and i.indid != 0 and i.indid != 255
		order by o.name, i.name

		select @baduse_cnt = @baduse_cnt + @@rowcount
	end

	if exists (select * from #uids
		where user_name(uid) = @user_name and catagory = "o")
	begin
		select  "Object Type" = convert(char(30), x.name),
			"Reserved Word Object Names" = o.name
		from sysobjects o, master.dbo.spt_values v,
			master.dbo.spt_values x
		where lower(o.name) = v.name and v.type = 'W' 
			and o.uid = @uid
			and o.sysstat & 2063 = x.number
			and x.type = "O"
		order by x.name, o.name

		select @baduse_cnt = @baduse_cnt + @@rowcount
	end

	if exists (select * from #uids 
		where user_name(uid) = @user_name and catagory = "t")
	begin
		select "Reserved Word Datatype Names" = t.name
		from systypes t, master.dbo.spt_values v
		where lower(t.name) = v.name and v.type = 'W'
			and t.uid = @uid
		order by t.name

		select @baduse_cnt = @baduse_cnt + @@rowcount
	end

	/* Get next id  */
	select @user_name = min(user_name(uid)) from #uids
		where user_name(uid) > @user_name

	/* If there are more user names, print a dividing mark between them. */
	if (@user_name is not NULL)
	begin
		select "-------------------------------------------------------------"
	end
end


if (@user_name_param is NULL)
begin

	select @owner_cnt = @baduse_cnt

	if (@baduse_cnt != 0)
	begin
		select "-------------------------------------------------------------"
	end
	select "Database-wide Objects" = " "

	/*
	** Print the database wide objects: users and segments
	*/

	if exists (select * from sysusers u, master.dbo.spt_values v
			where lower(u.name) = v.name and v.type = 'W'
				and u.name != "public")
	begin
		select "Reserved Word User Names" = u.name
		from sysusers u, master.dbo.spt_values v
		where lower(u.name) = v.name and v.type = 'W'
			and u.name != "public"
		order by u.name

		select @baduse_cnt = @baduse_cnt + @@rowcount
	end

	if exists (select * from syssegments s, master.dbo.spt_values v
			where lower(s.name) = v.name and v.type = 'W'
				and s.name != "default")
	begin
		select "Reserved Word Segment Names" = s.name
		from syssegments s, master.dbo.spt_values v
		where lower(s.name) = v.name and v.type = 'W'
			and s.name != "default"
		order by s.name

		select @baduse_cnt = @baduse_cnt + @@rowcount
	end


	if (db_name() = "master")
	begin
		/* Print the Server-wide information:
		**	logins, charsets, databases, and languages
		*/

		if exists (select * from master.dbo.syslogins l, 
				master.dbo.spt_values v
				where lower(l.name) = v.name and v.type = 'W')
		begin
			select "Reserved Word Login Names" = l.name
			from master.dbo.syslogins l, master.dbo.spt_values v
			where lower(l.name) = v.name and v.type = 'W'
			order by l.name

			select @baduse_cnt = @baduse_cnt + @@rowcount
		end

		if exists (select * from master.dbo.syscharsets c, 
				master.dbo.spt_values v
				where lower(c.name) = v.name and v.type = 'W')
		begin
			select "Reserved Word Charset Names" = c.name
			from master.dbo.syscharsets c, master.dbo.spt_values v
			where lower(c.name) = v.name and v.type = 'W'
			order by c.name

			select @baduse_cnt = @baduse_cnt + @@rowcount
		end

		if exists (select * from master.dbo.sysdatabases d, 
				master.dbo.spt_values v
				where lower(d.name) = v.name and v.type = 'W')
		begin
			select "Reserved Word Database Names" = d.name
			from master.dbo.sysdatabases d, master.dbo.spt_values v
			where lower(d.name) = v.name and v.type = 'W'
			order by d.name

			select @baduse_cnt = @baduse_cnt + @@rowcount
		end

		if exists (select * from master.dbo.syslanguages l, 
				master.dbo.spt_values v
				where lower(l.name) = v.name and v.type = 'W')
		begin
			select "Reserved Word Language Names" = l.name
			from master.dbo.syslanguages l, master.dbo.spt_values v
			where lower(l.name) = v.name and v.type = 'W'
			order by l.name

			select @baduse_cnt = @baduse_cnt + @@rowcount
		end

		if exists (select * from master.dbo.sysdevices d, 
				master.dbo.spt_values v
				where lower(d.name) = v.name and v.type = 'W')
		begin
			select "Reserved Word Device Names" = d.name
			from master.dbo.sysdevices d, master.dbo.spt_values v
			where lower(d.name) = v.name and v.type = 'W'
			order by d.name

			select @baduse_cnt = @baduse_cnt + @@rowcount
		end

		if exists (select * from master.dbo.sysremotelogins r, 
							master.dbo.spt_values v
			where lower(r.remoteusername) = v.name and v.type = 'W')
		begin
			select "Reserved Word Remote Logins" = 
							r.remoteusername
			from master.dbo.sysremotelogins r, 
				master.dbo.spt_values v
			where lower(r.remoteusername) = v.name and v.type = 'W'
			order by r.remoteusername

			select @baduse_cnt = @baduse_cnt + @@rowcount
		end

		if exists (select * from master.dbo.sysservers s, 
				master.dbo.spt_values v
			where lower(s.srvname) = v.name and v.type = 'W')
		begin
			select "Reserved Word Server Names" = s.srvname
			from master.dbo.sysservers s, master.dbo.spt_values v
			where lower(s.srvname) = v.name and v.type = 'W'
			order by s.srvname

			select @baduse_cnt = @baduse_cnt + @@rowcount
		end

		if exists (select * from master.dbo.sysservers s, 
				master.dbo.spt_values v
			where lower(s.srvnetname) = v.name and v.type = 'W')
		begin
			select "Reserved Word ServerNetNames" = s.srvnetname
			from master.dbo.sysservers s, master.dbo.spt_values v
			where lower(s.srvnetname) = v.name and v.type = 'W'
			order by s.srvnetname

			select @baduse_cnt = @baduse_cnt + @@rowcount
		end
	end
	if (@baduse_cnt != 0 and @owner_cnt = @baduse_cnt)
	begin
		/*
		** 18037, " Found no reserved words used as names for 
		**	    database-wide objects."
		**
		** NOTE:  sp_getmessage is not used for retrieving message text
		** because this sproc must also run on 4.8 servers which cannot
		** support the '%1!' syntax in the print statement.
		*/
		select @msg = description from master.dbo.sysmessages
        		where error = 18037
        		and langid is NULL
		print @msg
	end
end


if (@baduse_cnt = 0)
begin
	/*
	** 18038, " Found no reserved words used as database object names."
	**
	** NOTE:  sp_getmessage is not used for retrieving message text
	** because this sproc must also run on 4.8 servers which cannot
	** support the '%1!' syntax in the print statement.
	*/
	select @msg = description from master.dbo.sysmessages
        	where error = 18038
        	and langid is NULL
	print @msg
end

return(@baduse_cnt)
go
go
grant execute on sp_checkreswords to public
go
dump transaction master with truncate_only
go
sp_configure "allow updates", 0
go
reconfigure with override
go
print 'Upgrade installation is complete.'
go
