为什么不调用-sqlcmd return ALL 查询数据
Why doesn't invoke-sqlcmd return ALL the query data
我在 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)
我没有在输出中看到我的测试数据库 users/roles。我正在使用 Windows 身份验证。同一用户正在 运行 使用 PowerShell 命令并通过 SSMS 连接。此外,在我的 PowerShell 输出中,我看到禁用的帐户。当我 运行 SSMS 中的查询时,我没有看到。
关于如何从 PowerShell 获得与从 SSMS 获得相同结果的任何建议?
我不认为你 运行 这两个命令针对同一个数据库。也就是说,在 SSMS 中,您 运行 它针对您想要的数据库,但是在您的 Invoke-SqlCmd
命令中,您没有指定您 运行 针对哪个数据库。它将默认为数据库 master
,这就是您看到 "disabled" 帐户的原因。尝试指定 -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')
我在 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)
我没有在输出中看到我的测试数据库 users/roles。我正在使用 Windows 身份验证。同一用户正在 运行 使用 PowerShell 命令并通过 SSMS 连接。此外,在我的 PowerShell 输出中,我看到禁用的帐户。当我 运行 SSMS 中的查询时,我没有看到。
关于如何从 PowerShell 获得与从 SSMS 获得相同结果的任何建议?
我不认为你 运行 这两个命令针对同一个数据库。也就是说,在 SSMS 中,您 运行 它针对您想要的数据库,但是在您的 Invoke-SqlCmd
命令中,您没有指定您 运行 针对哪个数据库。它将默认为数据库 master
,这就是您看到 "disabled" 帐户的原因。尝试指定 -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')