Effects of sp_rename on Stored Procedures

There comes a time when mistakes are made.  Sometimes those mistakes can be as annoying as a spelling mistake during the creation of a stored procedure.  When a mistake such as that happens, we are given a few choices.  One could either rename the stored procedure, drop and recreate the stored procedure or simply leave the mistake alone.

When choosing to rename the stored procedure, one may quickly reach for the stored procedure that can be readily used for renaming various objects.  That procedure was provided by Microsoft after-all and is named sp_rename.  Reaching for that tool however might be a mistake.  Here is what is documented about the use of sp_rename to rename a stored procedure.  That documentation can be read at this link on MSDN.

We recommend you do not use this statement to rename stored procedures, triggers, user-defined functions, or views; instead, drop the object and re-create it with the new name.

And later in the same documentation, one can read the following.

Renaming a stored procedure, function, view, or trigger will not change the name of the corresponding object name in the definition column of the sys.sql_modules catalog view. Therefore, we recommend that sp_rename not be used to rename these object types. Instead, drop and re-create the object with its new name.

Now, a chief complaint against dropping and recreating the stored procedure, as recommended, is that process can cause permissions issues.  I am less concerned about the permissions issues and see that as more of a nuisance that is easily overcome due to great documentation and a few quick script executions to restore the permissions.  Despite that, I think we might have a means to address the rename and permissions issue that will be shared later in this article.

Using sp_rename

When using sp_rename, it would be good to understand what happens and what one might expect to see.  Let’s use the following script to create a stored procedure to step through an exercise to rename a stored procedure and evaluate the results.

When I execute that series of batches, I will get an output that matches the following.

renameme

 

When looking at the results we can see that the use of sp_rename does indeed change the name of the stored procedure as it is represented via sys.objects and metadata.  We can also see that the definition of the stored procedure does not change as it is held within the metadata.

If I choose to check the definition through the use of OBJECT_DEFINITION()  instead of sys.sql_modules, you will be pleased to know that sys.sql_modules calls OBJECT_DEFINITION() to produce the definition that is seen in the catalog view.

Well, that does pose a potential problem.  We see that the object definition is unchanged and may report the name as being different than what the object name truly is.  What happens if I execute the stored procedure?  Better yet, if I can execute the stored procedure and then capture the sql text associated to that plan, what would I see?

Yes!  The renamed stored procedure does indeed execute properly.  I even get three results back for that execution.  Better yet, I get an execution plan which I can pull a plan_hash from in order to evaluate the sql text associated to the plan.  In case you are wondering, the execution plan does contain the statement text of the procedure.  But for this case, I want to look at the entire definition associated to the plan rather than the text stored in the plan.  In this particular scenario, I only see the body of the procedure and not the create statement that is held in metadata.

plan

For this particular execution and plan, I can see a plan_hash of 0xE701AFB2D865FA71.  I can now take this and provide it to the following query to find the full proc definition from metadata.

And after executing that query, I can see results similar to the following.

execplancache_text

 

Now is that because in some way the query that was just run was also running OBJECT_DEFINITION()?  Let’s look at the execution plan for both OBJECT_DEFINITION() and the query that was just run.

obj_def_plan

 

Looking at the XML for that particular plan and we see xml supporting that plan.  There is no further function callout and the plan is extremely simple.

Now looking at the plan for the query involving the query_plan_hash we will see the following.

fngetsql

 

Looking at this graphical plan, we can see that we are calling FNGETSQL.  Looking at the XML for this plan, we can verify that FNGETSQL is the only function call to retrieve the full sql text associated to this plan execution.  FNGETSQL is an internal function for SQL server used to build internal tables that might be used by various DMOs.  You can read just a bit more about that here.

What now?

After all of that, it really looks pessimistic for sp_rename.  The procedure renames but does not properly handle metadata and stored procedure definitions.  So does that mean we are stuck with drop and create as the Microsoft documentation suggests?

If you have access to the full procedure definition you could issue an alter statement.  In the little example that I have been using, I could issue the following statement.

After executing that script, I could check sys.sql_modules once again and find a more desirable result.

And my results…

finallymatching

 

If you don’t have the text to create the proc, you could use SSMS to script it out for you.  It is as simple as right-clicking the proc in question, selecting modify and then executing the script.  It should script at with the correct proc name (the beauty of SMO) and then you can get the metadata all up to snuff in your database.

Of course, if you prefer, you could just drop and recreate the procedure.  Then reapply all of the pertinent permissions.  That is pretty straight forward too.

SQL Server UG in Vegas August 2014 Meeting

Comments: No Comments
Published on: August 13, 2014

evite

 

Another Great meeting and topic is coming to the folks in Las Vegas.  This month we have had the luck of finding Mike Fal (blog | twitter) step up and fill our speaker void.

Yes, it happens to be the second Thursday of the month already.  Being that time of month, the SQL Server UG of Las Vegas will be meeting at the Tahitti Village Resort and Spa to take in some great info on SQL Server and Powershell.

You can read the information about the meeting on our Meetup page here.  Or you can continue reading here.

Improving Database Restores with Powershell

Database restores are a key function of any database administrator’s job. However, it can be an extremely time consuming task to sort through your backups, find the right files, and then get your database up and running. In an emergency this will have a disastrous impact on your Recovery Time Objective(RTO) and lead to the dreaded angry-CTO-in-your-cube effect. By leveraging some easy-to-use Powershell scripts, you can avoid the second disaster and the pain that comes with it. By attending this session, you will understand how you can use the Powershell automation framework for database restores, see scripts that will let you restore faster, and learn techniques to extend these tools for migrating data and testing backups.

Michael Fal  

Mike Fal is a musician turned SQL Server DBA, with 10+ years of experience as a database administrator. He has worked for several different industries, including healthcare, software development, marketing, and manufacturing and has experience supporting databases from 1 GB to 4 TB in size. Mike received his a Bachelor’s Degree from the University of Colorado at Boulder in 1996 and has been caught playing trombone in public on more than one occasion.

LiveMeeting Info

Attendee URL:https://www.livemeeting.com/cc/UserGroups/join?id=4RD8NP&role=attend

Meeting ID: 4RD8NP

Whether you are in Vegas or you are somewhere else, you are welcome to join us.  We hope to see you Thursday evening.

T-SQL Tuesday #57 – SQL Family and Community

Comments: 1 Comment
Published on: August 12, 2014

TSQL2sDay150x150Look at that, it is once again that time of the month that has come to be known as TSQL Tuesday.  TSQL Tuesday is a recurring blog party that occurs on the second Tuesday (most generally) of the month.  This event was the brainchild of Adam Machanic (Blog | Twitter).  

Anybody who desires to participate in this blog party is welcome to join.  Coincidentally, that open invitation is at the base of this months topic – Family and Community.  The invitation, issued by Jeffrey Verheul (blog | twitter), for this month said the following.

This month I would like to give everyone the opportunity to write about SQL Family. The first time I heard of SQL Family, was on Twitter where someone mentioned this. At first I didn’t know what to think about this. I wasn’t really active in the community, and I thought it was a little weird. They were just people you meet on the internet, and might meet in person at a conference some day. But I couldn’t be more wrong about that!

Once you start visiting events, forums, or any other involvement with the community, you’ll see I was totally wrong. I want to hear those stories. How do you feel about SQL Family? Did they help you, or did you help someone in the SQL Family? I would love to hear the stories of support, how it helped you grow and evolve, or how you would explain SQL Family to your friends and family (which I find hard). Just write about whatever topic you want, as long as it’s related to SQL Family or community.

What is it?

We have all likely seen SQL Family thrown about here and there.  But what exactly is this notion we hear about so often?

I think we have a good idea about what family might be.  I think we might even have a good idea of what a friend is.  Lastly, I might propose that we know what a community is.  When we talk of this thing called SQL Family, I like to think that it is a combination of family, friends and community.

mushroom

These are people that can come together and talk about various different things that span far beyond SQL Server.  We may only see each other at events every now and then.  Those events can be anything from a User Group meeting to a large conference or even at a road race (5k, half marathon, marathon).

These are the people that are willing to help where help is needed or wanted.  That help can be anything ranging from well wishes and prayers, to teaching about SQL Server, to lending a vehicle, or anything along that spectrum.

I have seen this community go out of their way to help provide a lift to a hotel or to the airport.  These people will help with lodging in various circumstances when/if they can.  These are the people that have been known to make visits to hospitals to give well wishes for other people in the community.

Isn’t that what friends / family really boils down to?  People that can talk to each other on an array of topics?  People that go out of their way to help?  Think about it for a minute or three.

Virtual Box is TOO Small

Comments: No Comments
Published on: August 5, 2014

I have been working on upgrading my laptop.  Since my laptop housed a bunch of my virtual machines for various presentations and labs, that means also upgrading and/or converting my virtual machines.

The new laptop is Windows 8.1.  With the new laptop I was interested in converting a bunch of my Virtual Box machines to Hyper-V machines.  That desire was put on hold after discovering that I needed to first convert the virtual disks and then import them.  That wasn’t what put me off to it for awhile though.

The fact that I had to install Virtual Box on the new laptop to do the conversion made it less desirable. You see, in order to make Virtual Box work, I had to uninstall Hyper-V from Windows 8.1 because HV disables settings that are required by Virtual Box to work.  Jumping through those hoops just makes me less inclined to hurry and try the conversion to Hyper-V.  Maybe someday down the road.

That said, with the new laptop supporting a resolution of 3200 x 1800, I found that my virtual machines started displaying extremely tiny resolutions.  No matter how I scaled the machine, the internal machine resolution was remaining tiny.

Come to find out, the virtual machine was using the 3200 x 1800 resolution of the host despite setting the virtual machine (internally) to resolution settings as low as 640 x 480 (which just produced a small window on the desktop).  In the settings for Virtual Box, I could not find a means to override that behavior.

What I did find though was a setting in the Windows 8.1 host control panel that affected the virtual machine size.  In the Display control panel there is a setting  saying “Let me choose one scaling level for all my displays”. That seems to help with this scaling issue.

As it appears, many applications automatically adjust the scaling on such a high resolution device.  Virtual Box does not automatically scale and just adopts the host machine resolution.  In my case, it was also always adopting the host machine max resolution.

I changed that setting, adjusted my resolution to 1920 x 1080, and then also adjusted the scaling factor to 150%.  This fixed the issue with the excessively small screen on the virtual machines.  Sure, I could have continued to use the windows “+” combination to zoom in an out constantly, but that was more of a hassle than convenience.

We’ll just have to see how it goes for the time being.  Maybe in a few weeks when I have time to try the Hyper-V conversion again, I will be able to jump back to the higher resolution.  We’ll find out then if that scaling issue is an issue for Hyper-V just as it is for Virtual Box.

Presenting at PSSUG

Comments: No Comments
Published on: August 4, 2014

pssug

 

Coming up this week, I have been given the opportunity to do something I enjoy doing.  I have been invited to present to the folks in Philadelphia.

Sebastian Meine (blog | twitter) approached me during SQL Saturday in Philadelphia and I was happy to help where I could.

The topic for this presentation will be Extended Events.  We are going to try a slightly different approach, but here is what was posted in the meeting invite.

Jason Brimhall SQL 2012 Extended Events
Extended Events were introduced in SQL Server 2008. With each edition since, we have seen a significant upgrade to this feature. Join me for a little adventure into defining this thing called Extended Events. We will discuss how to use Extended Events to aid in performance tuning and in day to day administration. We will also explore some background and the architecture of Extended Events.
Jason Brimhall

Jason Brimhall

 

As a Microsoft Certified Master/Microsoft Certified Solutions Master, I have 19 years’ experience in the technology industry, including more than 10 with SQL Server. I also earned a Bachelor’s Degree in Business Information Systems from Utah State University. One of the highlights of my career was co-authoring SQL Server 2012 T-SQL Recipes: A Problem-Solution Approach .  I am a frequent presenter at SQL Server events worldwide, which includes SQLSaturdays and User Groups. I am also currently helping lead the Las Vegas SQL Users Group.

I am looking forward to this opportunity and to mingle with the group for a bit.  I hope to see you there.

Oh, and here is the link to the invite for the meeting.

«page 1 of 81




Calendar
August 2014
M T W T F S S
« Jul    
 123
45678910
11121314151617
18192021222324
25262728293031
Content
SQLHelp

SQLHelp


Welcome , today is Friday, August 29, 2014