Query lồng query

Query lồng query, giúp code query viết gọn hơn

Có 3 trường hợp lồng query:
1. Lồng tại SqlParameter
2. Lồng tại cuối của cmd query
3. Lồng từ lệnh url
--------------------------------------


1. Lồng tại SqlParameter

 //** Kiểm tra xem có tồn tại đơn hàng với ulr id

<Query>
<ID>Q1</ID>
<Src>12</Src>
<Type>Sql</Type>
<Cmd>INSERT INTO tbBanHang_SV (_SYS_KEY, NgayTao,KyHieu,So,UserName) VALUES (@_SYS_KEY, GETDATE(),@KyHieu,@So,@UserName); </Cmd>
<SqlParameter>
_SYS_KEY/-/{#NewGuid}
KyHieu/-/DH23
So/-/<getQuery>BanHang_iif/LaySoPhieuMoi/->/DH23/-and-/0000</getQuery>
UserName/-/{#SysUser-UserName}
</SqlParameter>
<SqlConfig>
 Call:ExecuteNonQuery
</SqlConfig>
</Query>

** Viết riêng ra 1 file Query BanHang_iif/LaySoPhieuMoi
<Query>
<ID>Q1</ID>
<Src>12</Src>
<Type>Sql</Type>
<Cmd>Select [dbo].[Format_Number_Zero]( ISNULL( Max(So),0)+1,@DinhDang)  From tbBanHang_SV Where KyHieu=@KyHieu</Cmd>
<SqlParameter>
KyHieu<pr&/>[input>1]
DinhDang<pr&/>[input>2]
</SqlParameter>
<SqlConfig>
Call:ExecuteScalar
</SqlConfig>
</Query>

Gợi ý: nếu dùng cùng tên tham số URL thì khi gọi query không cần truyền tham số
<getQuery>BanHang_iif/LaySoPhieuMoi</getQuery>

Và trong
<SqlParameter>
KyHieu<pr&/><iif-D>Url:....</iif-D>
DinhDang<pr&/><iif-D>Url:....</iif-D>
</SqlParameter>


2. Lồng tại cuối của cmd query
<Query>
<ID>Q</ID>
<Src>12</Src>
<Type>Sql</Type>
 <Cmd></Cmd>
<SqlParameter>
_SYS_KEY_P/-/<iif-D>Url:idDH</iif-D>
ID_HangHoa_DVT<pr&/><iif-D>Form:ID_HangHoa_DVT</iif-D>
</SqlParameter>
<SqlConfig>
 Call:ExecuteScalar
</SqlConfig>
</Query>
<includeQuery>
find_query:BanHang_iif/DonHang_Update_TongTien
<ID>Q</ID>/-->/<ID>NEW</ID>
<iif-D>Form:ID_HangHoa_DVT</iif-D>/-->/<iif-D>Form:DVT</iif-D>
</includeQuery>

Giải thích:
BanHang_iif/DonHang_Update_TongTien là tên query cần truy cập trong file Query BanHang_iif
X/-->/Y    thay thế chữ X thành Y
Mỗi chữ thay thế là mỗi dòng, phân cách bởi  /-->/

Trong ví dụ:
- Thay tên Q thành NEW: <ID>Q</ID>/-->/<ID>NEW</ID>
- <iif-D>Form:ID_HangHoa_DVT</iif-D>/-->/<iif-D>Form:DVT</iif-D>

Chú ý: thay lại dòng ID để khi thêm vào không bị trùng tên Query
<ID>Q</ID>/-->/<ID>NEW</ID>
Nếu không cần thay thế thì
<includeQuery>
find_query:DonHang_Update_TongTien
</includeQuery>

** Cũng có thể 1 query chỉ toàn code lồng query
Ví dụ:

<includeQuery>
find_query:BanHang_iiif/DonHang_Update_Tien
</includeQuery>
<includeQuery>
find_query:BanHang_iiif/DonHang_Update_TinhTrang
</includeQuery>


** 2 DonHang_Update_Tien và DonHang_Update_TinhTrang phải được tồn tại trong file Query BanHang_iif



3. Lồng từ lệnh url
Khi gọi query từ url
Ví dụ:
/adminxml/Query_Do.aspx?name=BanHang_iif/DonHang_Update_HangHoa&out=txt
-- Thêm tham số &add_q=tên_query
/adminxml/Query_Do.aspx?name=BanHang_iif/DonHang_Update_HangHoa&out=txt
&add_q=BanHang_iif/DonHang_Update_TongTien
 
* Gợi ý: nếu add nhiều query thêm dấu , giữa các query
&add_q=A,B,C

* Đang nghiên cứu: phải chèn được vào thứ tự query.

Mục liên quan: