Вот версия PowerShell:
Использование объектов управления SQL Server (SMO)
function Find-EmptyTables ($server,$database)
{
# Load SMO assembly
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$s = New-Object 'Microsoft.SqlServer.Management.Smo.Server' $server
$db = $s.Databases.Item($database)
$db.Tables | Where-Object { $_.RowCount -eq 0 } | Select Schema, Name, RowCount
}
В зависимости от количества баз данных вы можете использовать указанную выше функцию для списка каждого имени базы данных, заполненного переменной, и выводить его все одновременно, если имеете дело с одним сервером:
$DBList = 'MyDatabase1','MyDatabase2'
foreach ($d in $DBList) {
Find-EmptyTables -server MyServer -database $d |
Select @{Label="Database";Expression={$d}}, Schema, Name, RowCount
}
Я обычно просто создаю запрос, который создает запрос, который я хочу, а затем выполняю его вручную, но если вы хотите, чтобы все это за один раз ...
источник
В качестве дополнительного ответа
sp_MSforeachtable
полезна недокументированная системная хранимая процедура .Применяются обычные предупреждения о недокументированных функциях.
Вы можете посмотреть исходный код процедуры в master, если вам интересно, или если вы хотите быть уверены, что у него нет неприятных побочных эффектов. Он использует динамический SQL для создания курсора, что плохо сказывается на производительности (cursor = slow!), Поэтому используйте эту процедуру только для одноразовой задачи.
Кроме того,
sp_MSforeachtable
недоступно в базе данных Azure.источник
источник
источник