使用SELECT变量-TSQL更新
我有一个表,其中包含特定服务器上数据库的所有名称。我希望能够使用相关的数据库大小更新DBSizeMB列 到目前为止,我的代码是:使用SELECT变量-TSQL更新,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个表,其中包含特定服务器上数据库的所有名称。我希望能够使用相关的数据库大小更新DBSizeMB列 到目前为止,我的代码是: DECLARE @DatabaseName VARCHAR(100) UPDATE master.dbo.mytableName SET DBsizeMB = (SELECT total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2)) FROM maste
DECLARE @DatabaseName VARCHAR(100)
UPDATE master.dbo.mytableName
SET DBsizeMB = (SELECT total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2))
FROM master.sys.master_files)
WHERE DBSizeMB = NULL
AND DatabaseName = @DatabaseName
现在,“选择总大小”部分将汇总所有数据库的大小
如何将其设置为更新每个数据库?
Correlate
子查询
UPDATE mt
SET DBsizeMB = (SELECT total_size_mb = Cast(Sum(size) * 8. / 1024 AS DECIMAL(8, 2))
FROM master.sys.master_files f
JOIN sys.databases d
ON f.database_id = d.database_id
WHERE d.NAME = mt.DatabaseName)
FROM master.dbo.mytableName mt
WHERE DBSizeMB IS NULL
加入
版本
WITH cte
AS (SELECT total_size_mb = Cast(Sum(size) * 8. / 1024 AS DECIMAL(8, 2)),d.name
FROM master.sys.master_files f
JOIN sys.databases d
ON f.database_id = d.database_id)
UPDATE mt
SET DBsizeMB = c.total_size_mb
FROM master.dbo.mytableName mt
JOIN cte c
ON c.NAME = mt.DatabaseName
WHERE DBSizeMB IS NULL
同样如注释中所述,不要在Master
数据库中创建表。甚至在书中也提到
不要在master中创建用户对象
关联
子查询
UPDATE mt
SET DBsizeMB = (SELECT total_size_mb = Cast(Sum(size) * 8. / 1024 AS DECIMAL(8, 2))
FROM master.sys.master_files f
JOIN sys.databases d
ON f.database_id = d.database_id
WHERE d.NAME = mt.DatabaseName)
FROM master.dbo.mytableName mt
WHERE DBSizeMB IS NULL
加入
版本
WITH cte
AS (SELECT total_size_mb = Cast(Sum(size) * 8. / 1024 AS DECIMAL(8, 2)),d.name
FROM master.sys.master_files f
JOIN sys.databases d
ON f.database_id = d.database_id)
UPDATE mt
SET DBsizeMB = c.total_size_mb
FROM master.dbo.mytableName mt
JOIN cte c
ON c.NAME = mt.DatabaseName
WHERE DBSizeMB IS NULL
同样如注释中所述,不要在Master
数据库中创建表。甚至在书中也提到
不要在master中创建用户对象
不建议将自定义数据存储在
master
中。您的代码根本不会这样工作。sys.master_files是每个数据库的所有文件。绝对不要在master中创建自己的表。这是一个非常糟糕的主意。好吧,但它是在开发服务器上的,高级DBA批准它存储在系统数据库中。为这样的东西创建实用程序数据库并不难,对于以后的开始,迁移master
到其他地方是不(真的)可能的。据我所知,在master中应该包含的唯一内容是存储过程。即使如此,我们谈论的是像sp_Who2和sp_Blitz这样的全局实用程序,而不是应用程序使用的实用程序。不建议将自定义数据存储在master
中。您的代码根本不会像这样工作。sys.master_files是每个数据库的所有文件。绝对不要在master中创建自己的表。这是一个非常糟糕的主意。好吧,但它是在开发服务器上的,高级DBA批准它存储在系统数据库中。为这样的东西创建实用程序数据库并不难,对于以后的开始,迁移master
到其他地方是不(真的)可能的。据我所知,在master中应该包含的唯一内容是存储过程。即使如此,我们谈论的是全局实用程序,如sp_Who2和sp_Blitz,而不是应用程序使用的实用程序。我需要更改“WHERE DBSizeMB IS NULL”而不是“=NULL”。我需要更改“WHERE DBSizeMB IS NULL”而不是“=NULL”