Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 43 additions & 10 deletions sp_IndexCleanup/sp_IndexCleanup.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1360,6 +1360,17 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
RETURN;
END;

/*
Resolve the database_id locally with DB_ID() rather than trusting
sys.databases. On Azure SQL DB, sys.databases.database_id is scoped
to the logical server while DB_ID(), DB_NAME(), and the database_id
column in every DMV are scoped to the database/elastic pool, and the
two id spaces do not have to agree. Carrying the sys.databases id
made DB_NAME(@database_id) return NULL (Msg 515 on NOT NULL
database_name columns) and made DMV database_id joins match nothing.
DB_ID(d.name) returns the same value as d.database_id everywhere
except Azure, where it returns the id the DMVs actually use.
*/
INSERT INTO
#databases
WITH
Expand All @@ -1370,7 +1381,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
)
SELECT
d.name,
d.database_id
database_id =
ISNULL
(
DB_ID(d.name),
d.database_id
)
FROM sys.databases AS d
WHERE d.name = @database_name
AND d.state = 0
Expand Down Expand Up @@ -1404,7 +1420,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
)
SELECT
d.name,
d.database_id
/* DB_ID(d.name) rather than d.database_id: see the single-database insert above */
database_id =
ISNULL
(
DB_ID(d.name),
d.database_id
)
FROM sys.databases AS d
WHERE d.database_id > 4 /* Skip system databases */
AND d.state = 0
Expand Down Expand Up @@ -1717,7 +1739,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

SELECT DISTINCT
@database_id,
database_name = DB_NAME(@database_id),
/*
@database_name, never DB_NAME(@database_id): on Azure SQL DB the id
spaces differ and DB_NAME() of a foreign-space id returns NULL
*/
database_name = @database_name,
schema_id = s.schema_id,
schema_name = s.name,
object_id = i.object_id,
Expand Down Expand Up @@ -1889,13 +1915,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
EXECUTE sys.sp_executesql
@sql,
N'@database_id integer,
@database_name sysname,
@min_reads bigint,
@min_writes bigint,
@min_size_gb decimal(10,2),
@min_rows bigint,
@object_id integer,
@schema_name sysname',
@current_database_id,
@current_database_name,
@min_reads,
@min_writes,
@min_size_gb,
Expand Down Expand Up @@ -2298,7 +2326,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

SELECT
os.database_id,
database_name = DB_NAME(os.database_id),
database_name = @database_name,
schema_id = s.schema_id,
schema_name = s.name,
os.object_id,
Expand Down Expand Up @@ -2359,7 +2387,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
)
GROUP BY
os.database_id,
DB_NAME(os.database_id),
s.schema_id,
s.name,
os.object_id,
Expand Down Expand Up @@ -2421,8 +2448,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
EXECUTE sys.sp_executesql
@sql,
N'@database_id integer,
@database_name sysname,
@object_id integer',
@current_database_id,
@current_database_name,
@object_id;

SET @rc = ROWCOUNT_BIG();
Expand Down Expand Up @@ -2549,7 +2578,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

SELECT
database_id = @database_id,
database_name = DB_NAME(@database_id),
database_name = @database_name,
i.object_id,
i.index_id,
s.schema_id,
Expand Down Expand Up @@ -2765,9 +2794,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
EXECUTE sys.sp_executesql
@sql,
N'@database_id integer,
@database_name sysname,
@object_id integer,
@min_rows bigint',
@current_database_id,
@current_database_name,
@object_id,
@min_rows;

Expand Down Expand Up @@ -2797,7 +2828,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

SELECT
database_id = @database_id,
database_name = DB_NAME(@database_id),
database_name = @database_name,
x.object_id,
x.index_id,
x.schema_id,
Expand Down Expand Up @@ -2965,8 +2996,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
EXECUTE sys.sp_executesql
@sql,
N'@database_id integer,
@database_name sysname,
@object_id integer',
@current_database_id,
@current_database_name,
@object_id;

SET @rc = ROWCOUNT_BIG();
Expand Down Expand Up @@ -3011,7 +3044,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
)
SELECT
@current_database_id,
database_name = DB_NAME(@current_database_id),
database_name = @current_database_name,
id1.schema_id,
id1.schema_name,
id1.table_name,
Expand Down Expand Up @@ -3089,7 +3122,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
WHEN id1.is_unique_constraint = 1
THEN
N'ALTER TABLE ' +
QUOTENAME(DB_NAME(@current_database_id)) +
QUOTENAME(@current_database_name) +
N'.' +
QUOTENAME(id1.schema_name) +
N'.' +
Expand All @@ -3115,7 +3148,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
N'INDEX ' +
QUOTENAME(id1.index_name) +
N' ON ' +
QUOTENAME(DB_NAME(@current_database_id)) +
QUOTENAME(@current_database_name) +
N'.' +
QUOTENAME(id1.schema_name) +
N'.' +
Expand Down
Loading