Массивам нужно присвоить длина. Для обеспечения любого числа элементов используйте List
класс.
, Например:
List myInts = new List();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
SELECT
OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name
FROM
sys.database_permissions p
WHERE
OBJECT_NAME(major_id) = 'MyProc'
You can tweak this to join to sys.database_principals
, or sys.objects
if you want too
try (NOTE: works for more than stored procedures):
SELECT
dp.NAME AS principal_name
,dp.type_desc AS principal_type_desc
,o.NAME AS object_name
,o.type_desc
,p.permission_name
,p.state_desc AS permission_state_desc
FROM sys.all_objects o
INNER JOIN sys.database_permissions p ON o.OBJECT_ID=p.major_id
LEFT OUTER JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id
WHERE o.NAME = 'YourProcedureName'
Немного не по теме, но ... вы могли бы включить вашу базу данных разработки, чтобы "запомнить" разрешения, которые она имела на различные объекты и сохранить их во время разработки, независимо от того, сколько раз вы бросаете и создаете объект ...