Скрытые функции 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 ответа

В Studio управления можно поместить число после маркера конца пакета ДВИЖЕНИЯ, чтобы заставить пакет быть повторенным что количество раз:

PRINT 'X'
GO 10

распечатает 'X' 10 раз. Это может сохранить Вас из утомительной копии/вставки при выполнении повторяющегося материала.

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

Контрольная сумма

Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK) Where Column = Value
строки контрольной суммы

Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK)

таблицы
15
ответ дан GateKiller 23 November 2019 в 04:19
поделиться

Отбросьте все соединения с базой данных:

Use Master
Go

Declare @dbname sysname

Set @dbname = 'name of database you want to drop connections from'

Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = min(spid) from master.dbo.sysprocesses
        where dbid = db_id(@dbname) and spid > @spid
End
15
ответ дан GateKiller 23 November 2019 в 04:19
поделиться

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

EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-36'
16
ответ дан 2 revs, 2 users 86% 23 November 2019 в 04:19
поделиться

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

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

КРОМЕ и ПЕРЕСЕКАЮТСЯ

Вместо того, чтобы писать тщательно продуманные соединения и подзапросы, эти два ключевых слова являются намного более изящной стенографией и читаемым способом выразить намерение Вашего запроса при сравнении двух результатов запроса. Новый с SQL Server 2005, они решительно дополнительное ОБЪЕДИНЕНИЕ, которое уже существовало на языке TSQL в течение многих лет.

понятие КРОМЕ, ПЕРЕСЕКИТЕСЬ, и ОБЪЕДИНЕНИЕ фундаментально в теории множеств, которая служит основанием и основой реляционного моделирования, используемого всем современным RDBMS. Теперь, результаты типа схемы Венна могут быть более интуитивно и довольно легко сгенерированы с помощью TSQL.

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

Выяснение самых популярных запросов

  • С sys.dm_exec_query_stats, можно выяснить много комбинаций исследований запроса единым запросом.

Ссылка с commnad

select * from sys.dm_exec_query_stats 
order by execution_count desc
20
ответ дан 2 revs, 2 users 63% 23 November 2019 в 04:19
поделиться

HashBytes () для возврата MD2, MD4, MD5, SHA или хеша SHA1 его входа.

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

Если Вы хотите знать структуру таблицы, индексы и ограничения:

sp_help 'TableName'
22
ответ дан Eduardo Molteni 23 November 2019 в 04:19
поделиться

Менее известная техника TSQL для возврата строк в произвольном порядке:

-- Return rows in a random order
SELECT 
    SomeColumn 
FROM 
    SomeTable
ORDER BY 
    CHECKSUM(NEWID())
31
ответ дан 2 revs, 2 users 94% 23 November 2019 в 04:19
поделиться

TableDiff.exe

  • инструмент Table Difference позволяет Вам обнаруживать и согласовывать различия между источником и целевой таблицей или представлением. Утилита Tablediff может сообщить о различиях относительно схемы и данных. Самой популярной функцией tablediff является то, что это может генерировать сценарий, что можно работать на месте назначения, которое согласует различия между таблицами.

Ссылка

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

Отдельно оплачиваемые предметы Строки подключения:

MultipleActiveResultSets=true;

Это делает ADO.Net 2.0 и выше чтения несколько, передайте только, наборы результатов только для чтения на соединении единой базы данных, которое может улучшить производительность, если Вы делаете большое чтение. Можно включить его даже при выполнении соединения типов запроса.

приложение Name=MyProgramName

Теперь, когда Вы захотите видеть список активных соединений путем запросов sysprocesses таблицы, название программы появится в program_name столбце вместо "поставщика данных.Net SqlClient"

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

sp_msforeachtable: Выполняет команду с'?' заменил каждым именем таблицы. например,

exec sp_msforeachtable "dbcc dbreindex('?')"

можно дать до 3 команд для каждой таблицы

exec sp_msforeachtable
    @Command1 = 'print ''reindexing table ?''',
    @Command2 = 'dbcc dbreindex(''?'')',
    @Command3 = 'select count (*) [?] from ?'

кроме того, sp_MSforeachdb

52
ответ дан 5 revs, 3 users 46% 23 November 2019 в 04:19
поделиться

Если Вы хотите код хранимой процедуры, Вы можете:

sp_helptext 'ProcedureName'

(не уверенный, если это - скрытая функция, но я использую все это время)

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

Прием хранимой процедуры - то, что можно назвать их от оператора INSERT. Я нашел это очень полезным, когда я работал над базой данных SQL Server.

CREATE TABLE #toto (v1 int, v2 int, v3 char(4), status char(6))
INSERT #toto (v1, v2, v3, status) EXEC dbo.sp_fulubulu(sp_param1)
SELECT * FROM #toto
DROP TABLE #toto
13
ответ дан 2 revs, 2 users 91% 23 November 2019 в 04:19
поделиться

В SQL Server 2005/2008 для показа номеров строк в результате Запроса Select:

SELECT ( ROW_NUMBER() OVER (ORDER BY OrderId) ) AS RowNumber,
        GrandTotal, CustomerId, PurchaseDate
FROM Orders

ORDER BY является обязательным пунктом. ПО () пункт говорит Механизму SQL сортировать данные по указанному столбцу (в этом случае OrderId) и присваивать номера согласно результатам вида.

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

Полезный для парсинга аргументов хранимой процедуры: xp_sscanf

Считывает данные со строки в местоположения аргумента, определенные каждым аргументом формата.

следующий пример использует xp_sscanf для извлечения двух значений из исходной строки на основе их положений в формате исходной строки.

DECLARE @filename varchar (20), @message varchar (20)
EXEC xp_sscanf 'sync -b -fproducts10.tmp -rrandom', 'sync -b -f%s -r%s', 
  @filename OUTPUT, @message OUTPUT
SELECT @filename, @message

Вот набор результатов.

-------------------- -------------------- 
products10.tmp        random
10
ответ дан 2 revs 23 November 2019 в 04:19
поделиться

Простое шифрование с EncryptByKey

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

Сохраненные вычисляемые столбцы

  • Вычисляемые столбцы могут помочь Вам сместить стоимость вычисления во время выполнения для фазы модификации данных. Вычисляемый столбец снабжен остальной частью строки и прозрачно используется, когда выражение на вычисляемых столбцах и запросе соответствует. Можно также создать индексы на PCC’s для ускорения фильтраций и сканирований диапазона по выражению.

Ссылка

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

Не так скрытая функция, но настраивающий ключевые отображения в Studio управления под Tools\Options\Keyboard: Alt+F1 принят значение по умолчанию к sp_help "выделенному тексту", но я не могу жить без добавления Ctrl+F1 для sp_helptext "выделенного текста"

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

Найдите записи, какая дата падает где-нибудь в текущей неделе.

where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ), 0 )

Находят записи, какая дата произошла на прошлой неделе.

where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )

Возвраты дата в течение начала текущей недели.

select dateadd( week, datediff( week, 0, getdate() ), 0 )

Возвраты дата в течение начала прошлой недели.

select dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )
7
ответ дан GateKiller 23 November 2019 в 04:19
поделиться

Вот некоторые функции, которые я нахожу полезными, но много людей, кажется, не знает о:

sp_tables

Возвраты список объектов, которые могут быть запрошены в текущей среде. Это означает любой объект, который может появиться в ИЗ пункта, кроме объектов синонима.

Ссылка

sp_stored_procedures

Возвраты список хранимых процедур в текущей среде.

Ссылка

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

Дата возвращения [Только 112]

Select Cast(Floor(Cast(Getdate() As Float))As Datetime)

или

Select DateAdd(Day, 0, DateDiff(Day, 0, Getdate()))
9
ответ дан 3 revs 23 November 2019 в 04:19
поделиться

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

Пример:

DECLARE @nvcConcatonated nvarchar(max)
SET @nvcConcatonated = ''

SELECT @nvcConcatonated = @nvcConcatonated + C.CompanyName + ', '
FROM tblCompany C
WHERE C.CompanyID IN (1,2,3)

SELECT @nvcConcatonated

Результаты:

Acme, Microsoft, Apple,
15
ответ дан 23 November 2019 в 04:19
поделиться

Многие разработчики SQL Server, похоже, до сих пор не знают о предложении OUTPUT (SQL Server 2005 и новее) в операторах DELETE, INSERT и UPDATE.

Может быть чрезвычайно полезно знать, какие строки были вставлены, обновлены или удалены, и предложение OUTPUT позволяет сделать это очень легко - оно разрешает доступ к «виртуальным» таблицам, называемым вставленным и удалил (как в триггерах):

DELETE FROM (table)
OUTPUT deleted.ID, deleted.Description
WHERE (condition)

Если вы вставляете значения в таблицу, которая имеет поле первичного ключа INT IDENTITY, с предложением OUTPUT вы можете сразу получить вставленный новый идентификатор:

INSERT INTO MyTable(Field1, Field2)
OUTPUT inserted.ID
VALUES (Value1, Value2)

И если вы обновляете, может быть чрезвычайно полезно знать, что изменилось - в этом случае вставлено представляет новые значения (после UPDATE),в то время как удалено относится к старым значениям перед ОБНОВЛЕНИЕМ:

UPDATE (table)
SET field1 = value1, field2 = value2
OUTPUT inserted.ID, deleted.field1, inserted.field1
WHERE (condition)

Если будет возвращено много информации, вывод OUTPUT также может быть перенаправлен во временную таблицу или табличную переменную ( OUTPUT INTO @myInfoTable ).

Чрезвычайно полезно - и очень малоизвестно!

Марк

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

Конструкторы строк

Вы можете вставить несколько строк данных с помощью одного оператора вставки.

INSERT INTO Colors (id, Color)
VALUES (1, 'Red'),
       (2, 'Blue'),
       (3, 'Green'),
       (4, 'Yellow')
23
ответ дан 23 November 2019 в 04:19
поделиться

В Management Studio вы можете быстро получить список столбцов таблицы через запятую следующим образом:

  1. В Object Explorer разверните узлы данной таблицы (так вы увидите папки Columns, Keys, Constraints, Triggers и т.д.)
  2. Укажите на папку Columns и перетащите в запрос.

Это удобно, когда вы не хотите использовать чудовищный формат, возвращаемый щелчком правой кнопки мыши на таблице и выбором Script Table As..., затем Insert To.... Этот трюк работает и с другими папками, давая список имен, содержащихся в папке, через запятую.

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

dm_db_index_usage_stats

Это позволит вам узнать, обновлялись ли данные в таблице в последнее время, даже если у вас нет столбца DateUpdated на Таблица.

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'MyDatabase')
AND OBJECT_ID=OBJECT_ID('MyTable')

Код из: http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/

Ссылка на информацию от: SQL Server — дата/время последней вставленной строки таблицы?

Доступно в SQL 2005 и более поздних версиях

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

Масштабируемые Общие Базы данных

  • Через Масштабируемые Общие Базы данных можно смонтировать те же физические диски на товарных машинах и позволить нескольким экземплярам SQL Server 2005 отделываться того же набора файлов данных. Установка не требует дублирующегося устройства хранения данных для каждого экземпляра SQL Server и позволяет дополнительную вычислительную мощность через несколько экземпляров SQL Server, которые имеют их собственные локальные ресурсы как CPU, память, tempdb и потенциально другие локальные базы данных.

Ссылка

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

SQL Server Формата

  • устройства хранения данных Vardecimal 2005 добавляет новый формат устройства хранения данных для числовых и типов данных decimal, названных vardecimal. Vardecimal является представлением переменной длины для десятичных типов, которые могут сохранить неиспользованные байты в каждом экземпляре строки. Самая большая сумма сбережений прибывает из случаев, где десятичное определение является большим (как десятичное число (38,6)), но сохраненные значения являются маленькими (как значение 0,0) или существует большое количество повторных значений, или данные являются малонаселенными.

Ссылка

1
ответ дан Sklivvz 23 November 2019 в 04:19
поделиться
Другие вопросы по тегам:

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