Kỹ thuật sử dụng câu SQL động


Trong một số trường hợp chúng ta muốn lặp từng dòng dữ liệu để làm một việc gì đó thường dùng Cursor. Tuy nhiên trong thực tế Cursor rất chậm và sẽ Lock table khi chạy. Tôi xin viết vài câu lệnh đơn giản bằng SQL động để phục vụ một số công việc mà không cần phải dùng Cursor.

Yêu cầu tôi đặt ra là đếm tất cả số dòng của tất cả Table trong Database.

2013-05-24_234459

–Khai báo biến chứa câu lệnh, lưu ý phải thiết lập biến ban đầu là rỗng
declare @strSQL nvarchar(max) = ”

–Lấy tên table từ danh sách đối tượng trong sys.objects với type=’u’ (User table)
select @strSQL = @strSQL + ‘Select count(1) as DemTongSoDong,”’ + Name + ”’ as TableName from ‘ + name + ‘;’
from sys.objects
where type = ‘U’

–Xử lý câu SQL
exec( @strSQL )

P/s: các bạn chú ý biến @strSQL là biên kiểu nvarchar nên giá trị chuỗi cộng dồn có thể >8000 và sẽ execute lỗi, vì vậy nên cân nhắc số lượng table trong database có quá nhiều sinh ra tràng kiểu dữ liệu hay không.

Tùy vào nhu cầu mà các câu lệnh SQL động sẽ phức tạp hơn rất nhiều.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s