Ứng dụng chính để ghi lại một số ngôn ngữ phát triển và các mẫu SQL được sử dụng trong công việc, cập nhật liên tục
1.SQL liên quan
1. Mẫu SQL thông dụng
1.1. Tạo lại view một cách可重复
IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID('v_NhanVien') AND type = 'V')
DROP VIEW v_NhanVien
GO
CREATE VIEW v_NhanVien
AS
SELECT * FROM v_NhanVien a
GO
1.2. Tạo bảng một cách可重复
IF NOT EXISTS(SELECT * FROM sysobjects WHERE id = OBJECT_ID('ThongTinNhanVien') AND type = 'U'))
CREATE TABLE [ThongTinNhanVien](
[ID] [uniqueidentifier] PRIMARY KEY CLUSTERED
);
GO
1.3.Tạo lại Stored Procedure một cách可重复
IF (SELECT OBJECT_ID('proc_GetThongTinNhanVien')) IS NOT NULL
DROP PROC proc_GetThongTinNhanVien
GO
1.4.Cập nhật lại các trường một cách可重复
IF NOT EXISTS (SELECT * FROM syscolumns WHERE id = OBJECT_ID('ThongTinNhanVien') AND name = 'Ten')
ALTER TABLE [ThongTinNhanVien] ADD [Ten] [varchar] (50) NOT NULL;
GO
ALTER TABLE Bang1 ALTER COLUMN cot1 VARCHAR(255)
1.5.Các lệnh SQL cơ bản
--Xem cấu trúc bảng
sp_columns ThongTinNhanVien
--Xem lệnh tạo bảng
SELECT OBJECT_DEFINITION(OBJECT_ID('ThongTinNhanVien'))
--Xóa các cột trong bảng
ALTER TABLE ThongTinNhanVien DROP COLUMN Tuoi;
1. Chuyển hàng sang cột
Giả sử chúng ta có bảng chính NhanVien và bảng mở rộng NhanVien_Ext như sau:
| Id | Ma | Ten | Id | F_id | TenCot | Giatri | |
|---|---|---|---|---|---|---|---|
| 1 | 1001 | Zhang San | 1 | 1 | SoThich | Basketball | |
| 2 | 1002 | Li Si | 2 | 1 | Tuoi | 23 |
Để ghép các giá trị từ bảng mở rộng vào các cột của bảng chính, chúng ta cần sử dụng kỹ thuật chuyển hàng sang cột:
SELECT *
FROM [dbo].[NhanVien] a
INNER JOIN
(
SELECT id,
MAX(CASE
WHEN b.tencot = 'SoThich'
THEN b.giatri
ELSE NULL
END) AS SoThich,
MAX(CASE
WHEN b.tencot = 'Tuoi'
THEN b.giatri
ELSE NULL
END) AS Tuoi
FROM NhanVien_Ext b
GROUP BY id
) b ON a.Id = b.F_id;
Kết quả trả về:
| Id | Ma | Ten | SoThich | Tuoi |
|---|---|---|---|---|
| 1 | 1001 | Zhang San | Basketball | 23 |
2. Chèn dữ liệu vào bảng có khoá chính tự động tăng
Khi cần đồng bộ dữ liệu từ bảng NhanVien trong cơ sở dữ liệu test sang cơ sở dữ liệu chính thức, ta cần tắt chức năng tự động tăng của khoá chính để chèn dữ liệu:
SET IDENTITY_INSERT [dbo].[NhanVien] ON
--Lệnh chèn dữ liệu
SET IDENTITY_INSERT [dbo].[NhanVien] OFF
3. Vòng lặp dữ liệu
Trong SQL Server, thay vì sử dụng các con trỏ, ta có thể sử dụng các phương pháp khác để xử lý dữ liệu theo từng batch. Ví dụ, để xóa dữ liệu khỏi tất cả các bảng trong cơ sở dữ liệu:
Bước 1: Tạo bảng tạm lưu danh sách các bảng
Bước 2: Duyệt qua bảng tạm và sinh lệnh xóa
SELECT ROW_NUMBER() OVER(ORDER BY name) AS rowNumber, name INTO #bangTam FROM sysobjects WHERE type = 'U' ORDER BY name;
DECLARE @soLuong INT;
DECLARE @viTri INT = 1;
DECLARE @tenBang NVARCHAR(40);
DECLARE @cauLenh NVARCHAR(MAX) = '';
SELECT @soLuong = COUNT(1) FROM #bangTam;
WHILE @viTri <= @soLuong
BEGIN
SELECT @tenBang = name FROM #bangTam WHERE rowNumber = @viTri;
IF LEN(@tenBang) > 0
BEGIN
SET @cauLenh += 'DELETE FROM [dbo].[' + @tenBang + '];';
END
SET @viTri += 1;
END;
PRINT @cauLenh;
4. Xử lý dữ liệu Excel
Khi cần chuyển dữ liệu từ Excel sang SQL Server, ta có thể sử dụng các công thức Excel để sinh các lệnh INSERT. Ví dụ:
="INSERT INTO [dbo].[ThongTinNhanVien] VALUES('"&A1&"','"&B1&"',N'"&C1&"','"&D1&"','"&G1&"','"&H1&"','"&E1&"','"&I1&"','"&J1&"','"&K1&"','"&L1&"','"&M1&"','"&N1&"','"&O1&"','"&P1&"','"&TEXT(Q1,"yyyy-mm-dd")&"','"&R1&"','','','','','','','','','','"&Y1&"','"&TEXT(Z1,"yyyy-mm-dd")&"','"&TEXT(AA1,"yyyy-mm-dd")&"','"&AB1&"')"