Ghi chú phát triển ứng dụng

Ứ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&"')"

Thẻ: SQL Server T-SQL Dữ liệu Excel view Stored Procedure

Đăng vào ngày 30 tháng 6 lúc 20:31