How to get the name of the database a stored procedure is executed in within that stored procedure while it's executing?How to make a flexible service broker receive in a stored sql procedure, how to pass “FROM” parameter into receiveHow to log within a stored procedure that is encapsulated within a transactionHow to use same stored procedure for different tables and avoid using dynamic sqlSSRS - ERROR NUMBER:7357 while passing multiple value parameters using comma delimited string to stored procedureHow to write stored procedure use SP_HELPTEXT for getting information of objects belong to another databaseWhy always throwing error “Must declare scalar variable” while executing stored procedure?Multiple disparate functions within stored procedureHow properly call stored procedure from EXEC(SQL)?Stored Procedure Asking for Input While Processinghow to add option(recompile) within this stored procedure?

How could a female member of a species produce eggs unto death?

Why is stat::st_size 0 for devices but at the same time lseek defines the device size correctly?

Humanity loses the vast majority of its technology, information, and population in the year 2122. How long does it take to rebuild itself?

Does this AnyDice function accurately calculate the number of ogres you make unconcious with three 4th-level castings of Sleep?

Can anyone tell me why this program fails?

Welcoming 2019 Pi day: How to draw the letter π?

What are the possible solutions of the given equation?

Does the statement `int val = (++i > ++j) ? ++i : ++j;` invoke undefined behavior?

Rules about breaking the rules. How do I do it well?

Is a lawful good "antagonist" effective?

Font with correct density?

Why using two cd commands in bash script does not execute the second command

Sword in the Stone story where the sword was held in place by electromagnets

How is the Swiss post e-voting system supposed to work, and how was it wrong?

Bash replace string at multiple places in a file from command line

Does splitting a potentially monolithic application into several smaller ones help prevent bugs?

What options are left, if Britain cannot decide?

How could a scammer know the apps on my phone / iTunes account?

How do I hide Chekhov's Gun?

Can hydraulic brake levers get hot when brakes overheat?

Good allowance savings plan?

Why did it take so long to abandon sail after steamships were demonstrated?

Make a transparent 448*448 image

How Did the Space Junk Stay in Orbit in Wall-E?



How to get the name of the database a stored procedure is executed in within that stored procedure while it's executing?


How to make a flexible service broker receive in a stored sql procedure, how to pass “FROM” parameter into receiveHow to log within a stored procedure that is encapsulated within a transactionHow to use same stored procedure for different tables and avoid using dynamic sqlSSRS - ERROR NUMBER:7357 while passing multiple value parameters using comma delimited string to stored procedureHow to write stored procedure use SP_HELPTEXT for getting information of objects belong to another databaseWhy always throwing error “Must declare scalar variable” while executing stored procedure?Multiple disparate functions within stored procedureHow properly call stored procedure from EXEC(SQL)?Stored Procedure Asking for Input While Processinghow to add option(recompile) within this stored procedure?













2















Weird question?...maybe, but I have a need. :)



I have a stored procedure that I want to use universally in any database.
The stored procedure generates some dynamic SQL and then executes that SQL in a database that is passed in as one of the parameters in this procedure.



BUT I want to make the database parameter optional and when no database name is passed in, I want the dynamic SQL to execute within the same database that the procedure itself was called from. (Please keep in mind this procedure could be executed across databases and not within the same database that the procedure itself lives in.)










share|improve this question






















  • Do you need dynamic SQL? Is something stopping you from doing like: IF @dbname IS NULL then @dbname = (SELECT dbname()) or you mean the calling procedure itself?

    – Jacob H
    4 hours ago






  • 1





    @JacobH that unfortunately does not work when calling a stored proc from a different database, as it returns the dbname where the stored proc resides in.

    – Randi Vertongen
    3 hours ago












  • Right, I want when the procedure executes, a way for the procedure to be able to determine which database the query that executed it was executed from. For example if my procedure lives in database A, and I execute it from database B, then I want the procedure that lives in database A to be able to determine the query that executed it came from database B.

    – J.D.
    3 hours ago















2















Weird question?...maybe, but I have a need. :)



I have a stored procedure that I want to use universally in any database.
The stored procedure generates some dynamic SQL and then executes that SQL in a database that is passed in as one of the parameters in this procedure.



BUT I want to make the database parameter optional and when no database name is passed in, I want the dynamic SQL to execute within the same database that the procedure itself was called from. (Please keep in mind this procedure could be executed across databases and not within the same database that the procedure itself lives in.)










share|improve this question






















  • Do you need dynamic SQL? Is something stopping you from doing like: IF @dbname IS NULL then @dbname = (SELECT dbname()) or you mean the calling procedure itself?

    – Jacob H
    4 hours ago






  • 1





    @JacobH that unfortunately does not work when calling a stored proc from a different database, as it returns the dbname where the stored proc resides in.

    – Randi Vertongen
    3 hours ago












  • Right, I want when the procedure executes, a way for the procedure to be able to determine which database the query that executed it was executed from. For example if my procedure lives in database A, and I execute it from database B, then I want the procedure that lives in database A to be able to determine the query that executed it came from database B.

    – J.D.
    3 hours ago













2












2








2








Weird question?...maybe, but I have a need. :)



I have a stored procedure that I want to use universally in any database.
The stored procedure generates some dynamic SQL and then executes that SQL in a database that is passed in as one of the parameters in this procedure.



BUT I want to make the database parameter optional and when no database name is passed in, I want the dynamic SQL to execute within the same database that the procedure itself was called from. (Please keep in mind this procedure could be executed across databases and not within the same database that the procedure itself lives in.)










share|improve this question














Weird question?...maybe, but I have a need. :)



I have a stored procedure that I want to use universally in any database.
The stored procedure generates some dynamic SQL and then executes that SQL in a database that is passed in as one of the parameters in this procedure.



BUT I want to make the database parameter optional and when no database name is passed in, I want the dynamic SQL to execute within the same database that the procedure itself was called from. (Please keep in mind this procedure could be executed across databases and not within the same database that the procedure itself lives in.)







sql-server sql-server-2008-r2 stored-procedures dynamic-sql






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked 4 hours ago









J.D.J.D.

512312




512312












  • Do you need dynamic SQL? Is something stopping you from doing like: IF @dbname IS NULL then @dbname = (SELECT dbname()) or you mean the calling procedure itself?

    – Jacob H
    4 hours ago






  • 1





    @JacobH that unfortunately does not work when calling a stored proc from a different database, as it returns the dbname where the stored proc resides in.

    – Randi Vertongen
    3 hours ago












  • Right, I want when the procedure executes, a way for the procedure to be able to determine which database the query that executed it was executed from. For example if my procedure lives in database A, and I execute it from database B, then I want the procedure that lives in database A to be able to determine the query that executed it came from database B.

    – J.D.
    3 hours ago

















  • Do you need dynamic SQL? Is something stopping you from doing like: IF @dbname IS NULL then @dbname = (SELECT dbname()) or you mean the calling procedure itself?

    – Jacob H
    4 hours ago






  • 1





    @JacobH that unfortunately does not work when calling a stored proc from a different database, as it returns the dbname where the stored proc resides in.

    – Randi Vertongen
    3 hours ago












  • Right, I want when the procedure executes, a way for the procedure to be able to determine which database the query that executed it was executed from. For example if my procedure lives in database A, and I execute it from database B, then I want the procedure that lives in database A to be able to determine the query that executed it came from database B.

    – J.D.
    3 hours ago
















Do you need dynamic SQL? Is something stopping you from doing like: IF @dbname IS NULL then @dbname = (SELECT dbname()) or you mean the calling procedure itself?

– Jacob H
4 hours ago





Do you need dynamic SQL? Is something stopping you from doing like: IF @dbname IS NULL then @dbname = (SELECT dbname()) or you mean the calling procedure itself?

– Jacob H
4 hours ago




1




1





@JacobH that unfortunately does not work when calling a stored proc from a different database, as it returns the dbname where the stored proc resides in.

– Randi Vertongen
3 hours ago






@JacobH that unfortunately does not work when calling a stored proc from a different database, as it returns the dbname where the stored proc resides in.

– Randi Vertongen
3 hours ago














Right, I want when the procedure executes, a way for the procedure to be able to determine which database the query that executed it was executed from. For example if my procedure lives in database A, and I execute it from database B, then I want the procedure that lives in database A to be able to determine the query that executed it came from database B.

– J.D.
3 hours ago





Right, I want when the procedure executes, a way for the procedure to be able to determine which database the query that executed it was executed from. For example if my procedure lives in database A, and I execute it from database B, then I want the procedure that lives in database A to be able to determine the query that executed it came from database B.

– J.D.
3 hours ago










3 Answers
3






active

oldest

votes


















4














You can easily tell the dynamic SQL execute in a specific database by dynamically building a [database].sys.sp_executesql command:



USE your_database;
GO

CREATE PROCEDURE dbo.DatabaseNameOptional
@db sysname = NULL
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sql nvarchar(max) = N'SELECT DB_NAME(); /* other stuff */'

DECLARE @exec nvarchar(770) = COALESCE(@db, DB_NAME())
+ N'.sys.sp_executesql';

-- alternatively, just leave DB_NAME() out of it:

--DECLARE @exec nvarchar(770) = COALESCE(@db, N'')
-- + N'sys.sp_executesql';

EXEC @exec @sql;
END
GO


Try it out:



USE your_database;
GO

EXEC dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC dbo.DatabaseNameOptional @db = N'master';
GO -- output = master

USE tempdb;
GO

EXEC your_database.dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC your_database.dbo.DatabaseNameOptional @db = N'master';
GO -- output = master


In the execution context of the procedure, though, no, I don't think there's any way to determine where the call originated from (or to run in that context). That's the benefit of using a system-marked procedure in master - if that's the functionality you want, you need to decide if "putting objects in master" is ickier than "not getting what I want."






share|improve this answer

























  • Thanks! I'm good on building / executing the dynamic SQL end, but I'm sad there isn't a better way to determine the database which the stored procedure query was executed from. Perhaps it would be pretty janky, but what about going by one of the tables or DMVs that cache query execution stats? (I guess you would need to know the user who executed it too to not mix up concurrent executions.)

    – J.D.
    42 mins ago



















1














I don't like creating procedures in master, but if you put your procedure in the master database and add the SP_ prefix like sp_dynamicproc, you could call it from inside your own user database and get the correct db_name() parameter.



Source



An example



USE master 
GO
CREATE PROCEDURE dbo.sp_dynamicproc
(@dbname nvarchar(255) = NULL)
as
BEGIN

DECLARE @SQL NVARCHAR(MAX)

IF @dbname IS NULL
BEGIN
SET @dbname = (SELECT db_name());
END
SELECT db_name()
SET @SQL = 'SELECT * FROM '+QUOTENAME(@dbname)+'.INFORMATION_SCHEMA.COLUMNS ;';
EXEC(@SQL);

END


Calling the proc



USE test
GO
exec dbo.sp_dynamicproc;


Result



enter image description here






share|improve this answer

























  • Cool, this is helpful, +1 for that. But I'm with ya, I'd prefer to not create objects in the master database, and I have a dedicated database this procedure lives in with other similar types of functions.

    – J.D.
    3 hours ago


















0














Why don't you create your own SQL Server System Stored Procedures?



It's a better solution than using dynamic SQL.






share|improve this answer























  • Dynamic SQL will be occurring regardless, because I need to change my SQL statements that are executed based on the parameters inputted into the procedure. I gave you the +1 though because your answer is similarly helpful as @Randi's but I'd prefer to not create objects in the master database.

    – J.D.
    3 hours ago






  • 1





    Why is dynamic SQL bad? It's like a lot of things - it can be dangerous in certain scenarios, if you choose to use it without any research, but it shouldn't be written off just as a matter of course. It can accomplish a lot of really powerful things that you wouldn't be able to do otherwise.

    – Aaron Bertrand
    1 hour ago












  • Agreed, but I'm not saying dynamic SQL is bad. It's really powerful and I do like it actually. I use it in my favor to improve performance in difference situations, and to do whatever I need to customize some routines. When I first suggested, it seemed that it would be a "static stored procedure" or something like that. Using System Stored procedures he would be able to run something like: EXEC DB1.dbo.SP_whatever , EXEC DB2.dbo.SP_whatever. It would be pretty easy to know from which database it comes from.

    – Dan
    29 mins ago










Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "182"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f232169%2fhow-to-get-the-name-of-the-database-a-stored-procedure-is-executed-in-within-tha%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























3 Answers
3






active

oldest

votes








3 Answers
3






active

oldest

votes









active

oldest

votes






active

oldest

votes









4














You can easily tell the dynamic SQL execute in a specific database by dynamically building a [database].sys.sp_executesql command:



USE your_database;
GO

CREATE PROCEDURE dbo.DatabaseNameOptional
@db sysname = NULL
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sql nvarchar(max) = N'SELECT DB_NAME(); /* other stuff */'

DECLARE @exec nvarchar(770) = COALESCE(@db, DB_NAME())
+ N'.sys.sp_executesql';

-- alternatively, just leave DB_NAME() out of it:

--DECLARE @exec nvarchar(770) = COALESCE(@db, N'')
-- + N'sys.sp_executesql';

EXEC @exec @sql;
END
GO


Try it out:



USE your_database;
GO

EXEC dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC dbo.DatabaseNameOptional @db = N'master';
GO -- output = master

USE tempdb;
GO

EXEC your_database.dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC your_database.dbo.DatabaseNameOptional @db = N'master';
GO -- output = master


In the execution context of the procedure, though, no, I don't think there's any way to determine where the call originated from (or to run in that context). That's the benefit of using a system-marked procedure in master - if that's the functionality you want, you need to decide if "putting objects in master" is ickier than "not getting what I want."






share|improve this answer

























  • Thanks! I'm good on building / executing the dynamic SQL end, but I'm sad there isn't a better way to determine the database which the stored procedure query was executed from. Perhaps it would be pretty janky, but what about going by one of the tables or DMVs that cache query execution stats? (I guess you would need to know the user who executed it too to not mix up concurrent executions.)

    – J.D.
    42 mins ago
















4














You can easily tell the dynamic SQL execute in a specific database by dynamically building a [database].sys.sp_executesql command:



USE your_database;
GO

CREATE PROCEDURE dbo.DatabaseNameOptional
@db sysname = NULL
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sql nvarchar(max) = N'SELECT DB_NAME(); /* other stuff */'

DECLARE @exec nvarchar(770) = COALESCE(@db, DB_NAME())
+ N'.sys.sp_executesql';

-- alternatively, just leave DB_NAME() out of it:

--DECLARE @exec nvarchar(770) = COALESCE(@db, N'')
-- + N'sys.sp_executesql';

EXEC @exec @sql;
END
GO


Try it out:



USE your_database;
GO

EXEC dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC dbo.DatabaseNameOptional @db = N'master';
GO -- output = master

USE tempdb;
GO

EXEC your_database.dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC your_database.dbo.DatabaseNameOptional @db = N'master';
GO -- output = master


In the execution context of the procedure, though, no, I don't think there's any way to determine where the call originated from (or to run in that context). That's the benefit of using a system-marked procedure in master - if that's the functionality you want, you need to decide if "putting objects in master" is ickier than "not getting what I want."






share|improve this answer

























  • Thanks! I'm good on building / executing the dynamic SQL end, but I'm sad there isn't a better way to determine the database which the stored procedure query was executed from. Perhaps it would be pretty janky, but what about going by one of the tables or DMVs that cache query execution stats? (I guess you would need to know the user who executed it too to not mix up concurrent executions.)

    – J.D.
    42 mins ago














4












4








4







You can easily tell the dynamic SQL execute in a specific database by dynamically building a [database].sys.sp_executesql command:



USE your_database;
GO

CREATE PROCEDURE dbo.DatabaseNameOptional
@db sysname = NULL
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sql nvarchar(max) = N'SELECT DB_NAME(); /* other stuff */'

DECLARE @exec nvarchar(770) = COALESCE(@db, DB_NAME())
+ N'.sys.sp_executesql';

-- alternatively, just leave DB_NAME() out of it:

--DECLARE @exec nvarchar(770) = COALESCE(@db, N'')
-- + N'sys.sp_executesql';

EXEC @exec @sql;
END
GO


Try it out:



USE your_database;
GO

EXEC dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC dbo.DatabaseNameOptional @db = N'master';
GO -- output = master

USE tempdb;
GO

EXEC your_database.dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC your_database.dbo.DatabaseNameOptional @db = N'master';
GO -- output = master


In the execution context of the procedure, though, no, I don't think there's any way to determine where the call originated from (or to run in that context). That's the benefit of using a system-marked procedure in master - if that's the functionality you want, you need to decide if "putting objects in master" is ickier than "not getting what I want."






share|improve this answer















You can easily tell the dynamic SQL execute in a specific database by dynamically building a [database].sys.sp_executesql command:



USE your_database;
GO

CREATE PROCEDURE dbo.DatabaseNameOptional
@db sysname = NULL
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sql nvarchar(max) = N'SELECT DB_NAME(); /* other stuff */'

DECLARE @exec nvarchar(770) = COALESCE(@db, DB_NAME())
+ N'.sys.sp_executesql';

-- alternatively, just leave DB_NAME() out of it:

--DECLARE @exec nvarchar(770) = COALESCE(@db, N'')
-- + N'sys.sp_executesql';

EXEC @exec @sql;
END
GO


Try it out:



USE your_database;
GO

EXEC dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC dbo.DatabaseNameOptional @db = N'master';
GO -- output = master

USE tempdb;
GO

EXEC your_database.dbo.DatabaseNameOptional;
GO -- output = your_database

EXEC your_database.dbo.DatabaseNameOptional @db = N'master';
GO -- output = master


In the execution context of the procedure, though, no, I don't think there's any way to determine where the call originated from (or to run in that context). That's the benefit of using a system-marked procedure in master - if that's the functionality you want, you need to decide if "putting objects in master" is ickier than "not getting what I want."







share|improve this answer














share|improve this answer



share|improve this answer








edited 1 hour ago

























answered 1 hour ago









Aaron BertrandAaron Bertrand

152k18294490




152k18294490












  • Thanks! I'm good on building / executing the dynamic SQL end, but I'm sad there isn't a better way to determine the database which the stored procedure query was executed from. Perhaps it would be pretty janky, but what about going by one of the tables or DMVs that cache query execution stats? (I guess you would need to know the user who executed it too to not mix up concurrent executions.)

    – J.D.
    42 mins ago


















  • Thanks! I'm good on building / executing the dynamic SQL end, but I'm sad there isn't a better way to determine the database which the stored procedure query was executed from. Perhaps it would be pretty janky, but what about going by one of the tables or DMVs that cache query execution stats? (I guess you would need to know the user who executed it too to not mix up concurrent executions.)

    – J.D.
    42 mins ago

















Thanks! I'm good on building / executing the dynamic SQL end, but I'm sad there isn't a better way to determine the database which the stored procedure query was executed from. Perhaps it would be pretty janky, but what about going by one of the tables or DMVs that cache query execution stats? (I guess you would need to know the user who executed it too to not mix up concurrent executions.)

– J.D.
42 mins ago






Thanks! I'm good on building / executing the dynamic SQL end, but I'm sad there isn't a better way to determine the database which the stored procedure query was executed from. Perhaps it would be pretty janky, but what about going by one of the tables or DMVs that cache query execution stats? (I guess you would need to know the user who executed it too to not mix up concurrent executions.)

– J.D.
42 mins ago














1














I don't like creating procedures in master, but if you put your procedure in the master database and add the SP_ prefix like sp_dynamicproc, you could call it from inside your own user database and get the correct db_name() parameter.



Source



An example



USE master 
GO
CREATE PROCEDURE dbo.sp_dynamicproc
(@dbname nvarchar(255) = NULL)
as
BEGIN

DECLARE @SQL NVARCHAR(MAX)

IF @dbname IS NULL
BEGIN
SET @dbname = (SELECT db_name());
END
SELECT db_name()
SET @SQL = 'SELECT * FROM '+QUOTENAME(@dbname)+'.INFORMATION_SCHEMA.COLUMNS ;';
EXEC(@SQL);

END


Calling the proc



USE test
GO
exec dbo.sp_dynamicproc;


Result



enter image description here






share|improve this answer

























  • Cool, this is helpful, +1 for that. But I'm with ya, I'd prefer to not create objects in the master database, and I have a dedicated database this procedure lives in with other similar types of functions.

    – J.D.
    3 hours ago















1














I don't like creating procedures in master, but if you put your procedure in the master database and add the SP_ prefix like sp_dynamicproc, you could call it from inside your own user database and get the correct db_name() parameter.



Source



An example



USE master 
GO
CREATE PROCEDURE dbo.sp_dynamicproc
(@dbname nvarchar(255) = NULL)
as
BEGIN

DECLARE @SQL NVARCHAR(MAX)

IF @dbname IS NULL
BEGIN
SET @dbname = (SELECT db_name());
END
SELECT db_name()
SET @SQL = 'SELECT * FROM '+QUOTENAME(@dbname)+'.INFORMATION_SCHEMA.COLUMNS ;';
EXEC(@SQL);

END


Calling the proc



USE test
GO
exec dbo.sp_dynamicproc;


Result



enter image description here






share|improve this answer

























  • Cool, this is helpful, +1 for that. But I'm with ya, I'd prefer to not create objects in the master database, and I have a dedicated database this procedure lives in with other similar types of functions.

    – J.D.
    3 hours ago













1












1








1







I don't like creating procedures in master, but if you put your procedure in the master database and add the SP_ prefix like sp_dynamicproc, you could call it from inside your own user database and get the correct db_name() parameter.



Source



An example



USE master 
GO
CREATE PROCEDURE dbo.sp_dynamicproc
(@dbname nvarchar(255) = NULL)
as
BEGIN

DECLARE @SQL NVARCHAR(MAX)

IF @dbname IS NULL
BEGIN
SET @dbname = (SELECT db_name());
END
SELECT db_name()
SET @SQL = 'SELECT * FROM '+QUOTENAME(@dbname)+'.INFORMATION_SCHEMA.COLUMNS ;';
EXEC(@SQL);

END


Calling the proc



USE test
GO
exec dbo.sp_dynamicproc;


Result



enter image description here






share|improve this answer















I don't like creating procedures in master, but if you put your procedure in the master database and add the SP_ prefix like sp_dynamicproc, you could call it from inside your own user database and get the correct db_name() parameter.



Source



An example



USE master 
GO
CREATE PROCEDURE dbo.sp_dynamicproc
(@dbname nvarchar(255) = NULL)
as
BEGIN

DECLARE @SQL NVARCHAR(MAX)

IF @dbname IS NULL
BEGIN
SET @dbname = (SELECT db_name());
END
SELECT db_name()
SET @SQL = 'SELECT * FROM '+QUOTENAME(@dbname)+'.INFORMATION_SCHEMA.COLUMNS ;';
EXEC(@SQL);

END


Calling the proc



USE test
GO
exec dbo.sp_dynamicproc;


Result



enter image description here







share|improve this answer














share|improve this answer



share|improve this answer








edited 3 hours ago

























answered 3 hours ago









Randi VertongenRandi Vertongen

3,569822




3,569822












  • Cool, this is helpful, +1 for that. But I'm with ya, I'd prefer to not create objects in the master database, and I have a dedicated database this procedure lives in with other similar types of functions.

    – J.D.
    3 hours ago

















  • Cool, this is helpful, +1 for that. But I'm with ya, I'd prefer to not create objects in the master database, and I have a dedicated database this procedure lives in with other similar types of functions.

    – J.D.
    3 hours ago
















Cool, this is helpful, +1 for that. But I'm with ya, I'd prefer to not create objects in the master database, and I have a dedicated database this procedure lives in with other similar types of functions.

– J.D.
3 hours ago





Cool, this is helpful, +1 for that. But I'm with ya, I'd prefer to not create objects in the master database, and I have a dedicated database this procedure lives in with other similar types of functions.

– J.D.
3 hours ago











0














Why don't you create your own SQL Server System Stored Procedures?



It's a better solution than using dynamic SQL.






share|improve this answer























  • Dynamic SQL will be occurring regardless, because I need to change my SQL statements that are executed based on the parameters inputted into the procedure. I gave you the +1 though because your answer is similarly helpful as @Randi's but I'd prefer to not create objects in the master database.

    – J.D.
    3 hours ago






  • 1





    Why is dynamic SQL bad? It's like a lot of things - it can be dangerous in certain scenarios, if you choose to use it without any research, but it shouldn't be written off just as a matter of course. It can accomplish a lot of really powerful things that you wouldn't be able to do otherwise.

    – Aaron Bertrand
    1 hour ago












  • Agreed, but I'm not saying dynamic SQL is bad. It's really powerful and I do like it actually. I use it in my favor to improve performance in difference situations, and to do whatever I need to customize some routines. When I first suggested, it seemed that it would be a "static stored procedure" or something like that. Using System Stored procedures he would be able to run something like: EXEC DB1.dbo.SP_whatever , EXEC DB2.dbo.SP_whatever. It would be pretty easy to know from which database it comes from.

    – Dan
    29 mins ago















0














Why don't you create your own SQL Server System Stored Procedures?



It's a better solution than using dynamic SQL.






share|improve this answer























  • Dynamic SQL will be occurring regardless, because I need to change my SQL statements that are executed based on the parameters inputted into the procedure. I gave you the +1 though because your answer is similarly helpful as @Randi's but I'd prefer to not create objects in the master database.

    – J.D.
    3 hours ago






  • 1





    Why is dynamic SQL bad? It's like a lot of things - it can be dangerous in certain scenarios, if you choose to use it without any research, but it shouldn't be written off just as a matter of course. It can accomplish a lot of really powerful things that you wouldn't be able to do otherwise.

    – Aaron Bertrand
    1 hour ago












  • Agreed, but I'm not saying dynamic SQL is bad. It's really powerful and I do like it actually. I use it in my favor to improve performance in difference situations, and to do whatever I need to customize some routines. When I first suggested, it seemed that it would be a "static stored procedure" or something like that. Using System Stored procedures he would be able to run something like: EXEC DB1.dbo.SP_whatever , EXEC DB2.dbo.SP_whatever. It would be pretty easy to know from which database it comes from.

    – Dan
    29 mins ago













0












0








0







Why don't you create your own SQL Server System Stored Procedures?



It's a better solution than using dynamic SQL.






share|improve this answer













Why don't you create your own SQL Server System Stored Procedures?



It's a better solution than using dynamic SQL.







share|improve this answer












share|improve this answer



share|improve this answer










answered 4 hours ago









DanDan

644416




644416












  • Dynamic SQL will be occurring regardless, because I need to change my SQL statements that are executed based on the parameters inputted into the procedure. I gave you the +1 though because your answer is similarly helpful as @Randi's but I'd prefer to not create objects in the master database.

    – J.D.
    3 hours ago






  • 1





    Why is dynamic SQL bad? It's like a lot of things - it can be dangerous in certain scenarios, if you choose to use it without any research, but it shouldn't be written off just as a matter of course. It can accomplish a lot of really powerful things that you wouldn't be able to do otherwise.

    – Aaron Bertrand
    1 hour ago












  • Agreed, but I'm not saying dynamic SQL is bad. It's really powerful and I do like it actually. I use it in my favor to improve performance in difference situations, and to do whatever I need to customize some routines. When I first suggested, it seemed that it would be a "static stored procedure" or something like that. Using System Stored procedures he would be able to run something like: EXEC DB1.dbo.SP_whatever , EXEC DB2.dbo.SP_whatever. It would be pretty easy to know from which database it comes from.

    – Dan
    29 mins ago

















  • Dynamic SQL will be occurring regardless, because I need to change my SQL statements that are executed based on the parameters inputted into the procedure. I gave you the +1 though because your answer is similarly helpful as @Randi's but I'd prefer to not create objects in the master database.

    – J.D.
    3 hours ago






  • 1





    Why is dynamic SQL bad? It's like a lot of things - it can be dangerous in certain scenarios, if you choose to use it without any research, but it shouldn't be written off just as a matter of course. It can accomplish a lot of really powerful things that you wouldn't be able to do otherwise.

    – Aaron Bertrand
    1 hour ago












  • Agreed, but I'm not saying dynamic SQL is bad. It's really powerful and I do like it actually. I use it in my favor to improve performance in difference situations, and to do whatever I need to customize some routines. When I first suggested, it seemed that it would be a "static stored procedure" or something like that. Using System Stored procedures he would be able to run something like: EXEC DB1.dbo.SP_whatever , EXEC DB2.dbo.SP_whatever. It would be pretty easy to know from which database it comes from.

    – Dan
    29 mins ago
















Dynamic SQL will be occurring regardless, because I need to change my SQL statements that are executed based on the parameters inputted into the procedure. I gave you the +1 though because your answer is similarly helpful as @Randi's but I'd prefer to not create objects in the master database.

– J.D.
3 hours ago





Dynamic SQL will be occurring regardless, because I need to change my SQL statements that are executed based on the parameters inputted into the procedure. I gave you the +1 though because your answer is similarly helpful as @Randi's but I'd prefer to not create objects in the master database.

– J.D.
3 hours ago




1




1





Why is dynamic SQL bad? It's like a lot of things - it can be dangerous in certain scenarios, if you choose to use it without any research, but it shouldn't be written off just as a matter of course. It can accomplish a lot of really powerful things that you wouldn't be able to do otherwise.

– Aaron Bertrand
1 hour ago






Why is dynamic SQL bad? It's like a lot of things - it can be dangerous in certain scenarios, if you choose to use it without any research, but it shouldn't be written off just as a matter of course. It can accomplish a lot of really powerful things that you wouldn't be able to do otherwise.

– Aaron Bertrand
1 hour ago














Agreed, but I'm not saying dynamic SQL is bad. It's really powerful and I do like it actually. I use it in my favor to improve performance in difference situations, and to do whatever I need to customize some routines. When I first suggested, it seemed that it would be a "static stored procedure" or something like that. Using System Stored procedures he would be able to run something like: EXEC DB1.dbo.SP_whatever , EXEC DB2.dbo.SP_whatever. It would be pretty easy to know from which database it comes from.

– Dan
29 mins ago





Agreed, but I'm not saying dynamic SQL is bad. It's really powerful and I do like it actually. I use it in my favor to improve performance in difference situations, and to do whatever I need to customize some routines. When I first suggested, it seemed that it would be a "static stored procedure" or something like that. Using System Stored procedures he would be able to run something like: EXEC DB1.dbo.SP_whatever , EXEC DB2.dbo.SP_whatever. It would be pretty easy to know from which database it comes from.

– Dan
29 mins ago

















draft saved

draft discarded
















































Thanks for contributing an answer to Database Administrators Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f232169%2fhow-to-get-the-name-of-the-database-a-stored-procedure-is-executed-in-within-tha%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Magento 2 duplicate PHPSESSID cookie when using session_start() in custom php scriptMagento 2: User cant logged in into to account page, no error showing!Magento duplicate on subdomainGrabbing storeview from cookie (after using language selector)How do I run php custom script on magento2Magento 2: Include PHP script in headerSession lock after using Cm_RedisSessionscript php to update stockMagento set cookie popupMagento 2 session id cookie - where to find it?How to import Configurable product from csv with custom attributes using php scriptMagento 2 run custom PHP script

Can not update quote_id field of “quote_item” table magento 2Magento 2.1 - We can't remove the item. (Shopping Cart doesnt allow us to remove items before becomes empty)Add value for custom quote item attribute using REST apiREST API endpoint v1/carts/cartId/items always returns error messageCorrect way to save entries to databaseHow to remove all associated quote objects of a customer completelyMagento 2 - Save value from custom input field to quote_itemGet quote_item data using quote id and product id filter in Magento 2How to set additional data to quote_item table from controller in Magento 2?What is the purpose of additional_data column in quote_item table in magento2Set Custom Price to Quote item magento2 from controller

How to solve knockout JS error in Magento 2 Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?(Magento2) knockout.js:3012 Uncaught ReferenceError: Unable to process bindingUnable to process binding Knockout.js magento 2Cannot read property `scopeLabel` of undefined on Product Detail PageCan't get Customer Data on frontend in Magento 2Magento2 Order Summary - unable to process bindingKO templates are not loading in Magento 2.1 applicationgetting knockout js error magento 2Product grid not load -— Unable to process binding Knockout.js magento 2Product form not loaded in magento2Uncaught ReferenceError: Unable to process binding “if: function()return (isShowLegend()) ” magento 2