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

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

68 ответов

В 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
поделиться

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

  • Через Масштабируемые Общие Базы данных можно смонтировать те же физические диски на товарных машинах и позволить нескольким экземплярам 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
поделиться

установка DEFAULT_SCHEMA в sys.database_principles

  • SQL Server предоставляет большой гибкости определение имен. Однако определение имен происходит в стоимость и может стать заметно дорогим в специальных рабочих нагрузках, которые не полностью определяют ссылки на объект. 2005 SQL Server позволяет новую установку DEFEAULT_SCHEMA для каждого принципа базы данных (также известный как “user”), который может устранить эти издержки, не изменяя Ваш код TSQL.

Ссылка

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

Если Вы хотите отбросить все процедуры в DB -

SELECT  IDENTITY ( int, 1, 1 ) id, 
        [name] 
INTO    #tmp 
FROM    sys.procedures 
WHERE   [type]        = 'P' 
    AND is_ms_shipped = 0 

DECLARE @i INT 

SELECT   @i = COUNT( id ) FROM #tmp 
WHILE    @i > 0 
BEGIN 
   DECLARE @name VARCHAR( 100 ) 
   SELECT @name = name FROM #tmp WHERE id = @i 
   EXEC ( 'DROP PROCEDURE ' + @name ) 
   SET @i = @i-1 
END

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

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