SQL Server 2008/2012/2016 - проверьте, определен ли объект в системе или определен пользователем [дубликат]

Я частично отношусь к C #. Я использовал следующие linqpad. Но это можно было легко скомпилировать с помощью csc и запустить вызов из командной строки.

Не забудьте добавить пакеты excel в пространство имен.

void Main()
{
    var oExcelApp = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
    try{
        var WB = oExcelApp.ActiveWorkbook;
        var WS = (Worksheet)WB.ActiveSheet;
        ((string)((Range)WS.Cells[1,1]).Value).Dump("Cell Value"); //cel A1 val
        oExcelApp.Run("test_macro_name").Dump("macro");
    }
    finally{
        if(oExcelApp != null)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcelApp);
        oExcelApp = null;
    }
}
2
задан SqlRyan 15 June 2011 в 17:40
поделиться

2 ответа

Это работает на моей установке SQL Server 2008 R2. Я вообще не вижу ничего, кроме пользовательских баз данных

SELECT 
    *
FROM
   sys.objects
WHERE
   OBJECTPROPERTY(object_id, 'IsMSShipped') = 0

Вы можете изменить sys.objects , чтобы сказать, sys.tables и он все еще работает, или используйте " тип "для фильтрации. Или используйте OBJECTPROPERTY (object_id, «IsProcedure») и т. Д.

Примечание: это sys.objects в SQL Server 2005 +

Примечание 2: OBJECTPROPERTY будет работать для SQL Server 2000 тоже:

SELECT 
    *
FROM
   sysobjects
WHERE
   OBJECTPROPERTY(id, 'IsMSShipped') = 0
5
ответ дан SqlRyan 18 August 2018 в 20:18
поделиться
  • 1
    Это может быть то, с чем мне нужно идти, поскольку я заметил это свойство в представлении новой системы, но я надеюсь, что есть легкодоступное свойство, которое работает и в 2000 году. – SqlRyan 15 June 2011 в 17:46
  • 2
    er ... OBJECTPROPERTY также находится в SQL Server 2000 msdn.microsoft.com/en-us/library/aa276849 (SQL.80) .aspx – gbn 15 June 2011 в 17:47
  • 3
    Хм, конечно, и я просто подтвердил, что мой скрипт по-прежнему работает на сервере 2000 года. Спасибо за вашу помощь! – SqlRyan 15 June 2011 в 17:51
  • 4
    Я думаю, что @gbn прав, поэтому я считаю, что SELECT * FROM sysobjects WHERE OBJECTPROPERTY(id, 'IsMSShipped') = 0 будет работать в 2000 году. Правильно? – NullRef 15 June 2011 в 17:59

SQL Server 2005 и выше

SELECT
  SCHEMA_NAME(obj.schema_id) AS schema_name,
  obj.name AS proc_name
FROM
  sys.procedures obj WITH(NOLOCK)
ORDER BY
  schema_name,
  proc_name

SQL Server 2000

SELECT
  USER_NAME(obj.uid) AS user_name,
  obj.name AS proc_name,
FROM
  sysobjects obj WITH(NOLOCK)
WHERE
  (obj.status & 0x80000000) = 0
  AND RTRIM(obj.xtype) IN ('P', 'RF')
ORDER BY
  user_name,
  proc_name
2
ответ дан Optillect Team 18 August 2018 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: