Почему не вызывает-sqlcmd возвращает ВСЕ данные запроса - PullRequest
0 голосов
/ 14 января 2020

Я запускаю следующий запрос в SQL Server 2014:

SELECT
    dp.class_desc, dp.permission_name, dp.state_desc,
    ObjectName = OBJECT_NAME(major_id), 
    GranteeName = grantee.name, GrantorName = grantor.name
FROM 
    sys.database_permissions dp
JOIN
    sys.database_principals grantee ON dp.grantee_principal_id = grantee.principal_id
JOIN 
    sys.database_principals grantor ON dp.grantor_principal_id = grantor.principal_id

И я получаю все ожидаемые строки. Я создал тестовую базу данных пользователей и ролей и вижу их.

Когда я запускаю его в powershell:

(invoke-sqlcmd 'select dp.class_desc, dp.permission_name, dp.state_desc,
ObjectName = OBJECT_NAME(major_id), GranteeName = grantee.name, GrantorName = grantor.name
FROM sys.database_permissions dp
JOIN sys.database_principals grantee on dp.grantee_principal_id = grantee.principal_id
JOIN sys.database_principals grantor on dp.grantor_principal_id = grantor.principal_id -ServerInstance Blah\blah)

Я не вижу пользователей / ролей моей тестовой базы данных в выводе. Я использую Windows аутентификацию. Тот же пользователь запускает команду PowerShell и подключается через SSMS. Кроме того, в моем выводе PowerShell я вижу отключенные учетные записи. Я не вижу, когда я запускаю запрос в SSMS.

Есть ли какие-либо предложения о том, как получить из PowerShell те же результаты, что и из SSMS?

1 Ответ

1 голос
/ 14 января 2020

Не думаю, что вы запускаете обе команды для одной и той же базы данных. т. е. в SSMS вы запускаете ее для нужной вам базы данных, но в вашей команде Invoke-SqlCmd вы не указываете, с какой базой данных вы работаете. По умолчанию используется база данных master, поэтому вы видите «отключенные» учетные записи. Попробуйте указать параметр -Database.

(invoke-sqlcmd 'select dp.class_desc, dp.permission_name, dp.state_desc,
ObjectName = OBJECT_NAME(major_id), GranteeName = grantee.name, GrantorName = grantor.name
FROM sys.database_permissions dp
JOIN sys.database_principals grantee on dp.grantee_principal_id = grantee.principal_id
JOIN sys.database_principals grantor on dp.grantor_principal_id = grantor.principal_id' -ServerInstance 'Blah\blah' -Database 'MyDatabase')
...