Hi all--I'm adapting a stored procedure to work on transferring SQL Server 2005 tables and other objects owned under the dbo schema on a database to another non-dbo schema. Given that, I'm trying to use an "if...else" to prevent dbo-owned stored procedures and tables like dtproperties from moving with the rest of the objects to the non-dbo schema. Here's the code:
if exists (select * from sys.objects where object_id = object_id(N'[dbo].[chObjOwner]') and OBJECTPROPERTY(object_id, N'IsProcedure') = 1)
drop procedure [dbo].[chObjOwner]
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO
CREATE proc chObjOwner( @.usrName varchar(20), @.newUsrName varchar(50))
as
-- @.usrName is the current user
-- @.newUsrName is the new user
set nocount on
declare @.uid int -- UID of the user
declare @.objName varchar(50) -- Object name owned by user
declare @.currObjName varchar(50) -- Checks for existing object owned by new user
declare @.outStr varchar(256) -- SQL command with 'alter schema', 'alter authorization'
set @.uid = user_id(@.usrName)
declare chObjOwnerCur cursor static
for
select name from sys.objects where schema_id = @.uid
open chObjOwnerCur
if @.@.cursor_rows = 0
begin
print 'Error: No objects owned by ' + @.usrName
close chObjOwnerCur
deallocate chObjOwnerCur
return 1
end
fetch next from chObjOwnerCur into @.objName
while @.@.fetch_status = 0
begin
set @.currObjName = @.newUsrName + "." + @.objName
if (object_id(@.currObjName) > 0)
print 'WARNING *** ' + @.currObjName + ' already exists ***'
if @.currObjName in ('dt_addtosourcecontrol','dt_addtosourcecontrol_u','dt_adduserobject','dt_adduserobject_vcs','dt_checkinobject','dt_checkinobject_u','dt_checkoutobject','dt_checkoutobject_u','dt_displayoaerror','dt_displayoaerror_u','dt_droppropertiesbyid','dt_dropuserobjectbyid','dt_generateansiname','dt_getobjwithprop','dt_getobjwithprop_u','dt_getpropertiesbyid','dt_getpropertiesbyid_u','dt_getpropertiesbyid_vcs','dt_getpropertiesbyid_vcs_u','dt_isundersourcecontrol','dt_isundersourcecontrol_u','dt_removefromsourcecontrol','dt_setpropertybyid','dt_setpropertybyid_u','dt_validateloginparams','dt_validateloginparams_u','dt_vcsenabled','dt_verstamp006','dt_verstamp007','dt_whocheckedout','dt_whocheckedout_u','dtproperties')
begin
print 'WARNING *** ' + @.currObjName + ' is a system procedure'
end
else
begin
set @.outStr = "alter authorization on " + @.usrName + "." + @.objName + " to " + @.newUsrName
print @.outStr
set @.outStr = "alter schema " + @.newUsrName + " transfer " + @.usrName + "." + @.objName
print @.outStr
print 'go'
fetch next from chObjOwnerCur into @.objName
endclose chObjOwnerCur
deallocate chObjOwnerCur
set nocount off
return 0
GO
SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GO
Here's the error I get:
Msg 102, Level 15, State 1, Procedure chObjOwner, Line 51
Incorrect syntax near '0'.
I know that the cursor is having a problem closing and deallocating, but am not sure why the error is happening at this point. Any ideas?
Thanks!
One of your 'begin' s has no 'end'.
No comments:
Post a Comment