Obtaining database information and values in extended properties
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
I need to obtain each DB (together with its information) from SQL Server and I am doing so by the below:
use master;
select *
from sys.databases
where database_id > 4
order by name
I also need to obtain a particular value from extended properties. Currently I am doing the below FOR EACH DB manually to obtain this value:
use <db_name>
select value from sys.extended_properties
where class_desc='DATABASE' and name = 'Application Name'
However, I need to get the value outputted from the last query in a column for each of the DB displayed by the first query respectively. Can this be done?
sql-server
add a comment |
I need to obtain each DB (together with its information) from SQL Server and I am doing so by the below:
use master;
select *
from sys.databases
where database_id > 4
order by name
I also need to obtain a particular value from extended properties. Currently I am doing the below FOR EACH DB manually to obtain this value:
use <db_name>
select value from sys.extended_properties
where class_desc='DATABASE' and name = 'Application Name'
However, I need to get the value outputted from the last query in a column for each of the DB displayed by the first query respectively. Can this be done?
sql-server
add a comment |
I need to obtain each DB (together with its information) from SQL Server and I am doing so by the below:
use master;
select *
from sys.databases
where database_id > 4
order by name
I also need to obtain a particular value from extended properties. Currently I am doing the below FOR EACH DB manually to obtain this value:
use <db_name>
select value from sys.extended_properties
where class_desc='DATABASE' and name = 'Application Name'
However, I need to get the value outputted from the last query in a column for each of the DB displayed by the first query respectively. Can this be done?
sql-server
I need to obtain each DB (together with its information) from SQL Server and I am doing so by the below:
use master;
select *
from sys.databases
where database_id > 4
order by name
I also need to obtain a particular value from extended properties. Currently I am doing the below FOR EACH DB manually to obtain this value:
use <db_name>
select value from sys.extended_properties
where class_desc='DATABASE' and name = 'Application Name'
However, I need to get the value outputted from the last query in a column for each of the DB displayed by the first query respectively. Can this be done?
sql-server
sql-server
asked Apr 2 at 12:49
user1930901user1930901
423
423
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
You could use a cursor to loop over the databases and store the resultsets in a temporary table
CREATE TABLE #TEMP(Databasename nvarchar(500),
value sql_variant)
DECLARE @sql NVARCHAR(max);
DECLARE @dbname NVARCHAR(500);
DECLARE c cursor LOCAL FAST_FORWARD FOR SELECT NAME
FROM sys.databases
WHERE database_id > 4
ORDER BY NAME;
OPEN c
FETCH NEXT FROM c INTO @dbname;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '
use '+QUOTENAME(@dbname)+'
SELECT '''+QUOTENAME(@dbname)+''' as databasename,
value
FROM sys.extended_properties
WHERE class_desc=''DATABASE'' and name = ''Application Name''';
INSERT INTO #TEMP
EXEC(@sql);
FETCH NEXT FROM c INTO @dbname;
END
CLOSE c;
DEALLOCATE c;
SELECT * FROM #TEMP;
DROP TABLE #TEMP;
Testing
USE my_test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
USE Test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
Result
Databasename value
[my_test] ValueHere
[Test] ValueHere
add a comment |
I'd use dynamic T-SQL to combine the results into a single output.
DECLARE @cmd nvarchar(max);
SET @cmd = N'';
SELECT @cmd = @cmd + CASE WHEN @cmd = N'' THEN N'' ELSE N'
UNION ALL
' END + 'SELECT d.name
, AppName = (
SELECT ep.value
FROM ' + QUOTENAME(d.name) + N'.sys.extended_properties ep
WHERE ep.class_desc = N''DATABASE''
AND ep.name = N''Application Name''
)
, d.*
FROM sys.databases d
WHERE d.database_id = ' + CONVERT(nvarchar(11), d.database_id)
FROM sys.databases d
WHERE d.database_id > 4
AND d.state_desc = N'ONLINE'
AND d.user_access = 0
ORDER BY d.name;
SET @cmd = @cmd + N'
IF EXISTS (
SELECT 1
FROM sys.databases d
WHERE d.user_access <> 0
)
BEGIN
DECLARE @msg varchar(1000);
SET @msg = ''One or more databases are in single user mode, and cannot be accessed by this session.'';
RAISERROR (@msg, 14, 1);
END;
';
PRINT @cmd;
EXEC (@cmd);
The query above creates a T-SQL SELECT
statement for each online, multi-user, non-system, database on the instance, and combines them using UNION ALL
. It then executes all combined statements in one execution. If any database is not in multi-user mode, an error is generated to make it obvious that one or more databases are not included in the output.
add a comment |
Complementing other answers - you can use sp_ineachdb
- written by Aaron Bertrand and is part of firstResponderKit from Brent Ozar.
DECLARE @cmd nvarchar(max) = N'
select db_name(), value from sys.extended_properties
where class_desc=''DATABASE'' and name = ''Application Name'';';
EXEC master.dbo.sp_ineachdb @command = @cmd, @user_only = 1;
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f233746%2fobtaining-database-information-and-values-in-extended-properties%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
You could use a cursor to loop over the databases and store the resultsets in a temporary table
CREATE TABLE #TEMP(Databasename nvarchar(500),
value sql_variant)
DECLARE @sql NVARCHAR(max);
DECLARE @dbname NVARCHAR(500);
DECLARE c cursor LOCAL FAST_FORWARD FOR SELECT NAME
FROM sys.databases
WHERE database_id > 4
ORDER BY NAME;
OPEN c
FETCH NEXT FROM c INTO @dbname;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '
use '+QUOTENAME(@dbname)+'
SELECT '''+QUOTENAME(@dbname)+''' as databasename,
value
FROM sys.extended_properties
WHERE class_desc=''DATABASE'' and name = ''Application Name''';
INSERT INTO #TEMP
EXEC(@sql);
FETCH NEXT FROM c INTO @dbname;
END
CLOSE c;
DEALLOCATE c;
SELECT * FROM #TEMP;
DROP TABLE #TEMP;
Testing
USE my_test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
USE Test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
Result
Databasename value
[my_test] ValueHere
[Test] ValueHere
add a comment |
You could use a cursor to loop over the databases and store the resultsets in a temporary table
CREATE TABLE #TEMP(Databasename nvarchar(500),
value sql_variant)
DECLARE @sql NVARCHAR(max);
DECLARE @dbname NVARCHAR(500);
DECLARE c cursor LOCAL FAST_FORWARD FOR SELECT NAME
FROM sys.databases
WHERE database_id > 4
ORDER BY NAME;
OPEN c
FETCH NEXT FROM c INTO @dbname;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '
use '+QUOTENAME(@dbname)+'
SELECT '''+QUOTENAME(@dbname)+''' as databasename,
value
FROM sys.extended_properties
WHERE class_desc=''DATABASE'' and name = ''Application Name''';
INSERT INTO #TEMP
EXEC(@sql);
FETCH NEXT FROM c INTO @dbname;
END
CLOSE c;
DEALLOCATE c;
SELECT * FROM #TEMP;
DROP TABLE #TEMP;
Testing
USE my_test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
USE Test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
Result
Databasename value
[my_test] ValueHere
[Test] ValueHere
add a comment |
You could use a cursor to loop over the databases and store the resultsets in a temporary table
CREATE TABLE #TEMP(Databasename nvarchar(500),
value sql_variant)
DECLARE @sql NVARCHAR(max);
DECLARE @dbname NVARCHAR(500);
DECLARE c cursor LOCAL FAST_FORWARD FOR SELECT NAME
FROM sys.databases
WHERE database_id > 4
ORDER BY NAME;
OPEN c
FETCH NEXT FROM c INTO @dbname;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '
use '+QUOTENAME(@dbname)+'
SELECT '''+QUOTENAME(@dbname)+''' as databasename,
value
FROM sys.extended_properties
WHERE class_desc=''DATABASE'' and name = ''Application Name''';
INSERT INTO #TEMP
EXEC(@sql);
FETCH NEXT FROM c INTO @dbname;
END
CLOSE c;
DEALLOCATE c;
SELECT * FROM #TEMP;
DROP TABLE #TEMP;
Testing
USE my_test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
USE Test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
Result
Databasename value
[my_test] ValueHere
[Test] ValueHere
You could use a cursor to loop over the databases and store the resultsets in a temporary table
CREATE TABLE #TEMP(Databasename nvarchar(500),
value sql_variant)
DECLARE @sql NVARCHAR(max);
DECLARE @dbname NVARCHAR(500);
DECLARE c cursor LOCAL FAST_FORWARD FOR SELECT NAME
FROM sys.databases
WHERE database_id > 4
ORDER BY NAME;
OPEN c
FETCH NEXT FROM c INTO @dbname;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '
use '+QUOTENAME(@dbname)+'
SELECT '''+QUOTENAME(@dbname)+''' as databasename,
value
FROM sys.extended_properties
WHERE class_desc=''DATABASE'' and name = ''Application Name''';
INSERT INTO #TEMP
EXEC(@sql);
FETCH NEXT FROM c INTO @dbname;
END
CLOSE c;
DEALLOCATE c;
SELECT * FROM #TEMP;
DROP TABLE #TEMP;
Testing
USE my_test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
USE Test;
GO
EXEC sp_addextendedproperty
@name = N'Application Name',
@value = 'ValueHere';
Result
Databasename value
[my_test] ValueHere
[Test] ValueHere
answered Apr 2 at 13:39
Randi VertongenRandi Vertongen
4,7711924
4,7711924
add a comment |
add a comment |
I'd use dynamic T-SQL to combine the results into a single output.
DECLARE @cmd nvarchar(max);
SET @cmd = N'';
SELECT @cmd = @cmd + CASE WHEN @cmd = N'' THEN N'' ELSE N'
UNION ALL
' END + 'SELECT d.name
, AppName = (
SELECT ep.value
FROM ' + QUOTENAME(d.name) + N'.sys.extended_properties ep
WHERE ep.class_desc = N''DATABASE''
AND ep.name = N''Application Name''
)
, d.*
FROM sys.databases d
WHERE d.database_id = ' + CONVERT(nvarchar(11), d.database_id)
FROM sys.databases d
WHERE d.database_id > 4
AND d.state_desc = N'ONLINE'
AND d.user_access = 0
ORDER BY d.name;
SET @cmd = @cmd + N'
IF EXISTS (
SELECT 1
FROM sys.databases d
WHERE d.user_access <> 0
)
BEGIN
DECLARE @msg varchar(1000);
SET @msg = ''One or more databases are in single user mode, and cannot be accessed by this session.'';
RAISERROR (@msg, 14, 1);
END;
';
PRINT @cmd;
EXEC (@cmd);
The query above creates a T-SQL SELECT
statement for each online, multi-user, non-system, database on the instance, and combines them using UNION ALL
. It then executes all combined statements in one execution. If any database is not in multi-user mode, an error is generated to make it obvious that one or more databases are not included in the output.
add a comment |
I'd use dynamic T-SQL to combine the results into a single output.
DECLARE @cmd nvarchar(max);
SET @cmd = N'';
SELECT @cmd = @cmd + CASE WHEN @cmd = N'' THEN N'' ELSE N'
UNION ALL
' END + 'SELECT d.name
, AppName = (
SELECT ep.value
FROM ' + QUOTENAME(d.name) + N'.sys.extended_properties ep
WHERE ep.class_desc = N''DATABASE''
AND ep.name = N''Application Name''
)
, d.*
FROM sys.databases d
WHERE d.database_id = ' + CONVERT(nvarchar(11), d.database_id)
FROM sys.databases d
WHERE d.database_id > 4
AND d.state_desc = N'ONLINE'
AND d.user_access = 0
ORDER BY d.name;
SET @cmd = @cmd + N'
IF EXISTS (
SELECT 1
FROM sys.databases d
WHERE d.user_access <> 0
)
BEGIN
DECLARE @msg varchar(1000);
SET @msg = ''One or more databases are in single user mode, and cannot be accessed by this session.'';
RAISERROR (@msg, 14, 1);
END;
';
PRINT @cmd;
EXEC (@cmd);
The query above creates a T-SQL SELECT
statement for each online, multi-user, non-system, database on the instance, and combines them using UNION ALL
. It then executes all combined statements in one execution. If any database is not in multi-user mode, an error is generated to make it obvious that one or more databases are not included in the output.
add a comment |
I'd use dynamic T-SQL to combine the results into a single output.
DECLARE @cmd nvarchar(max);
SET @cmd = N'';
SELECT @cmd = @cmd + CASE WHEN @cmd = N'' THEN N'' ELSE N'
UNION ALL
' END + 'SELECT d.name
, AppName = (
SELECT ep.value
FROM ' + QUOTENAME(d.name) + N'.sys.extended_properties ep
WHERE ep.class_desc = N''DATABASE''
AND ep.name = N''Application Name''
)
, d.*
FROM sys.databases d
WHERE d.database_id = ' + CONVERT(nvarchar(11), d.database_id)
FROM sys.databases d
WHERE d.database_id > 4
AND d.state_desc = N'ONLINE'
AND d.user_access = 0
ORDER BY d.name;
SET @cmd = @cmd + N'
IF EXISTS (
SELECT 1
FROM sys.databases d
WHERE d.user_access <> 0
)
BEGIN
DECLARE @msg varchar(1000);
SET @msg = ''One or more databases are in single user mode, and cannot be accessed by this session.'';
RAISERROR (@msg, 14, 1);
END;
';
PRINT @cmd;
EXEC (@cmd);
The query above creates a T-SQL SELECT
statement for each online, multi-user, non-system, database on the instance, and combines them using UNION ALL
. It then executes all combined statements in one execution. If any database is not in multi-user mode, an error is generated to make it obvious that one or more databases are not included in the output.
I'd use dynamic T-SQL to combine the results into a single output.
DECLARE @cmd nvarchar(max);
SET @cmd = N'';
SELECT @cmd = @cmd + CASE WHEN @cmd = N'' THEN N'' ELSE N'
UNION ALL
' END + 'SELECT d.name
, AppName = (
SELECT ep.value
FROM ' + QUOTENAME(d.name) + N'.sys.extended_properties ep
WHERE ep.class_desc = N''DATABASE''
AND ep.name = N''Application Name''
)
, d.*
FROM sys.databases d
WHERE d.database_id = ' + CONVERT(nvarchar(11), d.database_id)
FROM sys.databases d
WHERE d.database_id > 4
AND d.state_desc = N'ONLINE'
AND d.user_access = 0
ORDER BY d.name;
SET @cmd = @cmd + N'
IF EXISTS (
SELECT 1
FROM sys.databases d
WHERE d.user_access <> 0
)
BEGIN
DECLARE @msg varchar(1000);
SET @msg = ''One or more databases are in single user mode, and cannot be accessed by this session.'';
RAISERROR (@msg, 14, 1);
END;
';
PRINT @cmd;
EXEC (@cmd);
The query above creates a T-SQL SELECT
statement for each online, multi-user, non-system, database on the instance, and combines them using UNION ALL
. It then executes all combined statements in one execution. If any database is not in multi-user mode, an error is generated to make it obvious that one or more databases are not included in the output.
edited Apr 2 at 14:15
answered Apr 2 at 13:42
Max VernonMax Vernon
52.3k13115232
52.3k13115232
add a comment |
add a comment |
Complementing other answers - you can use sp_ineachdb
- written by Aaron Bertrand and is part of firstResponderKit from Brent Ozar.
DECLARE @cmd nvarchar(max) = N'
select db_name(), value from sys.extended_properties
where class_desc=''DATABASE'' and name = ''Application Name'';';
EXEC master.dbo.sp_ineachdb @command = @cmd, @user_only = 1;
add a comment |
Complementing other answers - you can use sp_ineachdb
- written by Aaron Bertrand and is part of firstResponderKit from Brent Ozar.
DECLARE @cmd nvarchar(max) = N'
select db_name(), value from sys.extended_properties
where class_desc=''DATABASE'' and name = ''Application Name'';';
EXEC master.dbo.sp_ineachdb @command = @cmd, @user_only = 1;
add a comment |
Complementing other answers - you can use sp_ineachdb
- written by Aaron Bertrand and is part of firstResponderKit from Brent Ozar.
DECLARE @cmd nvarchar(max) = N'
select db_name(), value from sys.extended_properties
where class_desc=''DATABASE'' and name = ''Application Name'';';
EXEC master.dbo.sp_ineachdb @command = @cmd, @user_only = 1;
Complementing other answers - you can use sp_ineachdb
- written by Aaron Bertrand and is part of firstResponderKit from Brent Ozar.
DECLARE @cmd nvarchar(max) = N'
select db_name(), value from sys.extended_properties
where class_desc=''DATABASE'' and name = ''Application Name'';';
EXEC master.dbo.sp_ineachdb @command = @cmd, @user_only = 1;
answered Apr 2 at 13:50
KinKin
54.2k481192
54.2k481192
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f233746%2fobtaining-database-information-and-values-in-extended-properties%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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