“WHERE IN” / "SELECT NULLIF" / COALESCE

Select điều kiện “WHERE IN” :
SELECT * FROM Jobs
WHERE jobtype IN (SELECT jobtype FROM JobTypeList)

SELECT NULLIF – So sánh 2 giá trị, nếu bằng nhau thì trả về NULL, ngược lại sẽ trả về giá trị thứ nhất
DECLARE @Value1 int
DECLARE @Value2 int
SET @Value1 = 55
SET @Value2 = 55
SELECT NULLIF(@Value1, @Value2)
………
SELECT NULLIF(22, 21)


Trả về giá trị đầu tiên # NULL trong các giá trị đã cho (COALESCE)
DECLARE @Value1 int
DECLARE @Value2 int
DECLARE @Value3 int
SET @Value1 = 955
SET @Value2 = 22
SET @Value3 = 955
SELECT COALESCE(@Value1, @Value2, @Value3)
  • Ở đây @Value1 chưa có giá trị (=null) nên sẽ trả về giá trị của @Value2
  • Nếu @Value2=null thì sẽ trả về giá trị @Value3, ……

Ứng dụng code SQL:
SELECT COALESCE(createDate, '1900-01-01')
Nếu createDate=null thì trả về giá trị '1900-01-01'

Tạo bảng có các cột phân biệt chữ hoa – thường khi Select

SELECT
       product = product  collate Latin1_General_CS_AS,
       region_3 = region_3  collate Latin1_General_CS_AS
INTO authors_CS
FROM NewTable


Xem CSDL có bảng loại này không?
SELECT SERVERPROPERTY ('Collation')


Kết quả select thử:
SELECT * FROM authors_CS WHERE region_3='domestic'

SELECT * FROM authors_CS WHERE region_3='Domestic'

Hiển thị nội dung của Procedure (display code (text)) / Đổi tên bảng (Rename table) / Đổi tên cột của bảng / Select cấu trúc dữ liệu của 1 bảng

Hiển thị nội dung của Procedure (display code (text))



sp_helptext 'dbo.PopulateMatrixPriceRanking'


Đổi tên bảng (Rename table)
sp_rename 'old_tableName', 'new_tableName'


Đổi tên cột của bảng.
sp_rename 'HKGDaily.NZDTTV','HKDTTV','column'
sp_rename '[TableName].[Old_ColumnName]','New_ColumnName','column'
(‘column’ là cú pháp đc hiểu là đổi cột)
Select cấu trúc dữ liệu của 1 bảng (Structure table)

VD1:
sp_help RolePages

VD2:
SELECT * FROM information_schema.columns WHERE table_name='RolePages'

Lệnh backup db / Đếm các connection tới db / Ngắt các kết nối đến db / Kiểm tra tồn tại của 1 Database

Lệnh backup db

Backup database dbname to disk = 'c:\dbname.bak'
Restore database dbname from disk = 'c:\dbname.bak'

Đếm các connection tới db

SELECT sysprocesses.spid, sysprocesses.hostname, sysdatabases.name
FROM sysdatabases INNER JOIN sysprocesses ON sysdatabases.dbid = sysprocesses.dbid
WHERE [name] = 'dbname'

Ngắt các kết nối đến db

kill 60
kill procesid

Lệnh này nếu dùng ngon nó tương đương với chức năng turn off db, hay detach cũng vậy.


Kiểm tra tồn tại của 1 Database
IF EXISTS (SELECT * FROM sys.databases WHERE name='Taitd')
DROP DATABASE Taitd
ELSE
RESTORE DATABASE Taitd FROM DISK ='c:\dbname.bak'




OR


IF db_id('Taitd2') IS NOT NULL
PRINT('OK')
ELSE
PRINT('Hi')


VD:
IF DB_ID('TestDB') IS NOT NULL
DROP DATABASE TestDB

Câu lệnh gọi lại số identity vừa mới insert vào CSDL

SELECT @@IDENTITY AS 'Identity'
Câu này khó kiếm

Chính xác là thế này

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'

Trong jobs có 1 trường ID là identity thì câu lệnh trên lấy cái mã vừa insert vào. Nhiều lúc cái này dùng nhiều ghê gớm


Có thể dùng luôn cách lởm khác cho cái bảng jobs nếu vừa dùng lệnh
SELECT max(ID) FROM jobs
để lôi ra cái giá trị vừa insert vào bảng jobs