В 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 освободит память, используемую этим объектом, и выделит другую.
В Studio управления можно поместить число после маркера конца пакета ДВИЖЕНИЯ, чтобы заставить пакет быть повторенным что количество раз:
PRINT 'X'
GO 10
распечатает 'X' 10 раз. Это может сохранить Вас из утомительной копии/вставки при выполнении повторяющегося материала.
Контрольная сумма
Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK) Where Column = Value
строки контрольной суммы Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK)
таблицы Отбросьте все соединения с базой данных:
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
полезный при восстановлении базы данных для тестирования или что бы то ни было. Повторно отображает идентификатор для входа в систему правильно:
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-36'
Я знаю, что это не точно скрыто, но не слишком много людей знают о команда PIVOT . Я смог изменить хранимую процедуру, которая использовала курсоры и заняла 2 минуты для столкновения с быстрыми 6 вторыми частями кода, который был одной десятой количество строк!
Вместо того, чтобы писать тщательно продуманные соединения и подзапросы, эти два ключевых слова являются намного более изящной стенографией и читаемым способом выразить намерение Вашего запроса при сравнении двух результатов запроса. Новый с SQL Server 2005, они решительно дополнительное ОБЪЕДИНЕНИЕ, которое уже существовало на языке TSQL в течение многих лет.
понятие КРОМЕ, ПЕРЕСЕКИТЕСЬ, и ОБЪЕДИНЕНИЕ фундаментально в теории множеств, которая служит основанием и основой реляционного моделирования, используемого всем современным RDBMS. Теперь, результаты типа схемы Венна могут быть более интуитивно и довольно легко сгенерированы с помощью TSQL.
Выяснение самых популярных запросов
Ссылка с commnad
select * from sys.dm_exec_query_stats
order by execution_count desc
HashBytes () для возврата MD2, MD4, MD5, SHA или хеша SHA1 его входа.
Если Вы хотите знать структуру таблицы, индексы и ограничения:
sp_help 'TableName'
Менее известная техника TSQL для возврата строк в произвольном порядке:
-- Return rows in a random order
SELECT
SomeColumn
FROM
SomeTable
ORDER BY
CHECKSUM(NEWID())
TableDiff.exe
Отдельно оплачиваемые предметы Строки подключения:
MultipleActiveResultSets=true;
Это делает ADO.Net 2.0 и выше чтения несколько, передайте только, наборы результатов только для чтения на соединении единой базы данных, которое может улучшить производительность, если Вы делаете большое чтение. Можно включить его даже при выполнении соединения типов запроса.
приложение Name=MyProgramName
Теперь, когда Вы захотите видеть список активных соединений путем запросов sysprocesses таблицы, название программы появится в program_name столбце вместо "поставщика данных.Net SqlClient"
sp_msforeachtable
: Выполняет команду с'?' заменил каждым именем таблицы. например,
exec sp_msforeachtable "dbcc dbreindex('?')"
можно дать до 3 команд для каждой таблицы
exec sp_msforeachtable
@Command1 = 'print ''reindexing table ?''',
@Command2 = 'dbcc dbreindex(''?'')',
@Command3 = 'select count (*) [?] from ?'
кроме того, sp_MSforeachdb
Если Вы хотите код хранимой процедуры, Вы можете:
sp_helptext 'ProcedureName'
(не уверенный, если это - скрытая функция, но я использую все это время)
Прием хранимой процедуры - то, что можно назвать их от оператора 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
В SQL Server 2005/2008 для показа номеров строк в результате Запроса Select:
SELECT ( ROW_NUMBER() OVER (ORDER BY OrderId) ) AS RowNumber,
GrandTotal, CustomerId, PurchaseDate
FROM Orders
ORDER BY является обязательным пунктом. ПО () пункт говорит Механизму SQL сортировать данные по указанному столбцу (в этом случае OrderId) и присваивать номера согласно результатам вида.
Полезный для парсинга аргументов хранимой процедуры: 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
Сохраненные вычисляемые столбцы
Не так скрытая функция, но настраивающий ключевые отображения в Studio управления под Tools\Options\Keyboard: Alt+F1 принят значение по умолчанию к sp_help "выделенному тексту", но я не могу жить без добавления Ctrl+F1 для sp_helptext "выделенного текста"
Найдите записи, какая дата падает где-нибудь в текущей неделе.
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 )
Вот некоторые функции, которые я нахожу полезными, но много людей, кажется, не знает о:
sp_tables
Возвраты список объектов, которые могут быть запрошены в текущей среде. Это означает любой объект, который может появиться в ИЗ пункта, кроме объектов синонима.
sp_stored_procedures
Возвраты список хранимых процедур в текущей среде.
Дата возвращения [Только 112]
Select Cast(Floor(Cast(Getdate() As Float))As Datetime)
или
Select DateAdd(Day, 0, DateDiff(Day, 0, Getdate()))
Я не уверен, является ли это скрытой функцией или нет, но я наткнулся на это и обнаружил, что это полезно во многих случаях. Вы можете объединить набор полей в одном операторе выбора, а не использовать курсор и перебирать оператор выбора.
Пример:
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,
Многие разработчики 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
).
Чрезвычайно полезно - и очень малоизвестно!
Марк
Конструкторы строк
Вы можете вставить несколько строк данных с помощью одного оператора вставки.
INSERT INTO Colors (id, Color)
VALUES (1, 'Red'),
(2, 'Blue'),
(3, 'Green'),
(4, 'Yellow')
В Management Studio вы можете быстро получить список столбцов таблицы через запятую следующим образом:
Это удобно, когда вы не хотите использовать чудовищный формат, возвращаемый щелчком правой кнопки мыши на таблице и выбором Script Table As..., затем Insert To.... Этот трюк работает и с другими папками, давая список имен, содержащихся в папке, через запятую.
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 и более поздних версиях
Масштабируемые Общие Базы данных
SQL Server Формата