알아두면 유용한 MS SQL 쿼리들

테이블전체레코드 갯수를 구하는 가장 빠른 쿼리
테이블 전체 레코드 갯수를 구할 때 SELECT COUNT(*) FROM TableName 을 사용하지만 레코드 갯수가 많을 때는 느리고, 좀 부담이 된다.

SELECT rows FROM sysindexes WHERE id = OBJECT_ID(‘TableName’) AND indid < 2

테이블에서 랜덤하게 하나의 레코드를 선택할 때

SELECT TOP 1 * FROM TableName ORDER BY NEWID()

오늘의 날짜만 구하는 쿼리

SELECT DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)

어제의 날짜만 구하는 쿼리

SELECT DATEADD(dd, DATEDIFF(dd,0,GETDATE())-1, 0)

To Get The Current Identity Value From A Table

Let’s first create our two simple tables
CREATE TABLE TestOne (id INT identity,SomeDate DATETIME)
CREATE TABLE TestTwo (id INT identity,TestOneID INT,SomeDate DATETIME)

–Let’s insert 4 rows into the table
INSERT TestOne VALUES(GETDATE())
INSERT TestOne VALUES(GETDATE())
INSERT TestOne VALUES(GETDATE())
INSERT TestOne VALUES(GETDATE())

Here are diffrent ways to check for the current value

–1 @@IDENTITY
SELECT @@IDENTITY
–this returns 4

–2 DBCC CHECKIDENT
DBCC CHECKIDENT (TestOne, NORESEED)
after running DBCC CHECKIDENT the message returned is
Checking identity information: current identity value ’4′, current column value ’4′.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

–3 MAX function
SELECT MAX(id)
FROM TestOne
you can also check with the MAX function but this is not recommended becuase you might get some other identity value that is not yours but from a different user

–4 TOP 1 and ORDER BY DESC
SELECT TOP 1 id
FROM TestOne
ORDER BY id DESC
–The same applies here as for the max function, this is not recommended

–5 IDENT_CURRENT
SELECT IDENT_CURRENT(‘TestOne’)
–IDENT_CURRENT is another way to check

–6 SCOPE_IDENTITY
SELECT SCOPE_IDENTITY()
–This one is very similar to @@IDENTITY with one BIG difference (shown later)


출처 : http://sqlservercodebook.blogspot.com/2008/03/to-get-current-identity-value-from.html

[MSSQL] TIMESTAMP 데이타 타입에 관하여

MSSQL의 TIMESTAMP 데이타 타입은 레코드 변경사항이 있을 경우 자동으로 DB에서 유일한 값으로 채워지는 필드이다. MySql과 다르게 이 값은 시간과는 전혀 관계가 없는 데이타이다.

  • 마지막 사용된 값은 @@DBTS에 저장되어 있다.
  • 하나의 테이블에 TIMESTAMP 필드는 하나만 만들 수 있다.
  • 명시적으로 TIMESTAMP 필드를 갱신할 수 없다.
  • VARBINARY(8) 과 동일하다.