Скрытые функции SQL Server

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

215
задан 31 revs, 8 users 65% 6 May 2012 в 05:53
поделиться

73 ответа

Не недокументированный

любезность RowNumber Itzik Ben-Gan http://www.sqlmag.com/article/articleid/97675/sql_server_blog_97675.html

УСТАНАВЛИВАЕТ XACT_ABORT НА откате все на ошибке для транзакций

, весь _ SP полезен, просто просматривают книги онлайн

сочетания клавиш, которые я использую все время в студии управления, которую F6 - переключают между результатами и запрашивают Alt+X или F5-выполненный выделенный текст в запросе, если ничто не выбрано, работает, все окно Alt+T и Alt+D - приводит к тексту или сетке соответственно

0
ответ дан user31269 23 November 2019 в 04:19
поделиться
use db
go      
DECLARE @procName varchar(100)      
DECLARE @cursorProcNames CURSOR      
SET @cursorProcNames = CURSOR FOR      
select name from sys.procedures where modify_date > '2009-02-05 13:12:15.273' order by modify_date desc     

OPEN @cursorProcNames      
FETCH NEXT      
FROM @cursorProcNames INTO @procName      
WHILE @@FETCH_STATUS = 0      
BEGIN      
-- see the text of the last stored procedures modified on 
-- the db , hint Ctrl + T would give you the procedures test 
set nocount off;      
exec sp_HelpText @procName --- or print them      
-- print @procName      

FETCH NEXT      
FROM @cursorProcNames INTO @procName      
END      
CLOSE @cursorProcNames      

select @@error  
0
ответ дан 2 revs, 2 users 66% 23 November 2019 в 04:19
поделиться

Я нахожу sp_depends полезный. Это отображает объекты, которые зависят от данного объекта, например,

exec sp_depends 'fn_myFunction' 

объекты возвратов, которые зависят от этой функции (примечание, если объекты не были первоначально выполнены в базу данных в правильном порядке, это даст неправильные результаты.)

0
ответ дан 2 revs, 2 users 56% 23 November 2019 в 04:19
поделиться

В SQL Server 2005 Вы больше не должны работать хранимая процедура sp-blocker-pss80 . Вместо этого можно сделать:

exec sp_configure 'show advanced options', 1;
reconfigure;
go
exec sp_configure 'blocked process threshold', 30;
reconfigure; 

можно тогда запустить SQL Trace и выбрать Заблокированный процесс, сообщает класс событий в группе Ошибок и Предупреждений. Детали того события здесь .

0
ответ дан 2 revs, 2 users 96% 23 November 2019 в 04:19
поделиться
use db
go 

select o.name 
, (SELECT [definition] AS [text()] 
     FROM sys.all_sql_modules 
     WHERE sys.all_sql_modules.object_id=a.object_id 
     FOR XML PATH(''), TYPE
  )  AS Statement_Text
 , a.object_id
 , o.modify_date 

 FROM sys.all_sql_modules a 
 LEFT JOIN  sys.objects o ON a.object_id=o.object_id 
 ORDER BY  4 desc

--select * from sys.objects
0
ответ дан 2 revs, 2 users 52% 23 November 2019 в 04:19
поделиться

Хорошо, вот мои 2 цента:

http://dbalink.wordpress.com/2008/10/24/querying-the-object-catalog-and-information-schema-views/

я слишком ленив для переписывания всего этого здесь, поэтому проверьте мое сообщение. Это может быть тривиально многим, но будут некоторые, кто найдет его "скрытым сокровищем".

РЕДАКТИРОВАНИЕ:

Через некоторое время, я решил добавить код здесь, таким образом, Вы не должны переходить к моему блогу для наблюдения кода.

SELECT  T.NAME AS [TABLE NAME], C.NAME AS [COLUMN NAME], P.NAME AS [DATA TYPE], P.MAX_LENGTH AS[SIZE],   CAST(P.PRECISION AS VARCHAR) +‘/’+ CAST(P.SCALE AS VARCHAR) AS [PRECISION/SCALE]
FROM ADVENTUREWORKS.SYS.OBJECTS AS T
JOIN ADVENTUREWORKS.SYS.COLUMNS AS C
ON T.OBJECT_ID=C.OBJECT_ID
JOIN ADVENTUREWORKS.SYS.TYPES AS P
ON C.SYSTEM_TYPE_ID=P.SYSTEM_TYPE_ID
WHERE T.TYPE_DESC=‘USER_TABLE’;

Или, если Вы хотите вытянуть все Пользовательские Таблицы в целом, КУРСОР использования как это:

DECLARE @tablename VARCHAR(60)

DECLARE cursor_tablenames CURSOR FOR
SELECT name FROM AdventureWorks.sys.tables

OPEN cursor_tablenames
FETCH NEXT FROM cursor_tablenames INTO @tablename

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT  t.name AS [TABLE Name], c.name AS [COLUMN Name], p.name AS [DATA Type], p.max_length AS[SIZE],   CAST(p.PRECISION AS VARCHAR) +‘/’+ CAST(p.scale AS VARCHAR) AS [PRECISION/Scale]
FROM AdventureWorks.sys.objects AS t
JOIN AdventureWorks.sys.columns AS c
ON t.OBJECT_ID=c.OBJECT_ID
JOIN AdventureWorks.sys.types AS p
ON c.system_type_id=p.system_type_id
WHERE t.name = @tablename
AND t.type_desc=‘USER_TABLE’
ORDER BY t.name ASC

FETCH NEXT FROM cursor_tablenames INTO @tablename
END

CLOSE cursor_tablenames
DEALLOCATE cursor_tablenames

ДОПОЛНИТЕЛЬНАЯ ССЫЛКА (мой блог): http://dbalink.wordpress.com/2009/01/21/how-to-create-cursor-in-tsql/

0
ответ дан 2 revs 23 November 2019 в 04:19
поделиться

Некоторые недокументированные - здесь: Недокументированный но удобный SQL-сервер Procs и команды DBCC

0
ответ дан SQLMenace 23 November 2019 в 04:19
поделиться

Для SQL Server 2005:

select * from sys.dm_os_performance_counters

select * from sys.dm_exec_requests
0
ответ дан 3 revs, 3 users 62% 23 November 2019 в 04:19
поделиться

Получение результатов на основе строки идентификаторов, разделенных вертикальной чертой, в одном элементе статистики (альтернатива передаче xml или первому преобразованию строки с разделителями в таблицу)

Пример:

DECLARE @nvcIDs nvarchar(max)
SET @nvcIDs = '|1|2|3|'

SELECT C.*
FROM tblCompany C
WHERE @nvcIDs LIKE '%|' + CAST(C.CompanyID as nvarchar) + '|%' 
0
ответ дан 23 November 2019 в 04:19
поделиться

Я использую, чтобы добавить эту хранимую процедуру к главной базе данных,

Улучшения:

  • Обрезать имя хоста, поэтому копирование и вставка работает на VNC.
  • Добавлена ​​опция LOCK для простого наблюдения за текущими заблокированными процессами.

Использование:

  • EXEC sp_who3 'ACTIVE'
  • EXEC sp_who3 'LOCK'
  • EXEC sp_who3 spid_No

Вот и все.

CREATE procedure sp_who3
       @loginame sysname = NULL --or 'active' or 'lock'
as

declare  @spidlow   int,
         @spidhigh  int,
         @spid      int,
         @sid       varbinary(85)

select   @spidlow   =     0
        ,@spidhigh  = 32767


if @loginame is not NULL begin
    if upper(@loginame) = 'ACTIVE' begin
        select spid, ecid, status
            , loginame=rtrim(loginame)
            , hostname=rtrim(hostname)
            , blk=convert(char(5),blocked)
            , dbname = case
                            when dbid = 0 then null
                            when dbid <> 0 then db_name(dbid)
                        end
              ,cmd
        from  master.dbo.sysprocesses
        where spid >= @spidlow and spid <= @spidhigh AND
              upper(cmd) <> 'AWAITING COMMAND'
        return (0)
    end
    if upper(@loginame) = 'LOCK' begin
        select spid , ecid, status
            , loginame=rtrim(loginame)
            , hostname=rtrim(hostname)
            , blk=convert(char(5),blocked)
            , dbname = case
                            when dbid = 0 then null
                            when dbid <> 0 then db_name(dbid)
                        end
              ,cmd
        from  master.dbo.sysprocesses
        where spid >= 0 and spid <= 32767 AND
              upper(cmd) <> 'AWAITING COMMAND'
        AND convert(char(5),blocked) > 0
        return (0)
    end

end

if (@loginame is not NULL
   AND  upper(@loginame) <> 'ACTIVE'
   )
begin
    if (@loginame like '[0-9]%')    -- is a spid.
    begin
        select @spid = convert(int, @loginame)
        select spid, ecid, status
            , loginame=rtrim(loginame)
            , hostname=rtrim(hostname)
            , blk=convert(char(5),blocked)
            , dbname = case
                            when dbid = 0 then null
                            when dbid <> 0 then db_name(dbid)
                        end
              ,cmd
        from  master.dbo.sysprocesses
        where spid = @spid
    end
    else
    begin
        select @sid = suser_sid(@loginame)
        if (@sid is null)
        begin
            raiserror(15007,-1,-1,@loginame)
            return (1)
        end
        select spid, ecid, status
            , loginame=rtrim(loginame)
            , hostname=rtrim(hostname)
            , blk=convert(char(5),blocked)
            , dbname = case
                            when dbid = 0 then null
                            when dbid <> 0 then db_name(dbid)
                        end
               ,cmd
        from  master.dbo.sysprocesses
        where sid = @sid
    end
    return (0)
end


/* loginame arg is null */
select spid,
       ecid,
       status
       , loginame=rtrim(loginame)
       , hostname=rtrim(hostname)
       , blk=convert(char(5),blocked)
       , dbname = case
                    when dbid = 0 then null
                    when dbid <> 0 then db_name(dbid)
                end
       ,cmd
from  master.dbo.sysprocesses
where spid >= @spidlow and spid <= @spidhigh


return (0) -- sp_who
0
ответ дан 23 November 2019 в 04:19
поделиться

CTRL-E выполняет текущий выделенный текст в Query Analyzer.

0
ответ дан 23 November 2019 в 04:19
поделиться

Используйте

select * from information_schema

для получения списка всех баз данных, базовых таблиц, sps, views и т.д. в sql server.

0
ответ дан 23 November 2019 в 04:19
поделиться

Альтернатива sp_change_users_login Колтена:

ALTER USER wacom_app WITH LOGIN = wacom_app
0
ответ дан 23 November 2019 в 04:19
поделиться
Другие вопросы по тегам:

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