Làm cách nào để lưu trữ giá trị trường đã chọn vào một biến từ một truy vấn và sử dụng nó trong một câu lệnh cập nhật?Làm cách nào để gán kết quả được chọn cho một biến?
Dưới đây là thủ tục của tôi:
Tôi đang viết một SQL Server 2005 T-SQL stored procedure mà thực hiện như sau:
- được danh sách các hoá đơn id từ bảng hóa đơn và các cửa hàng để con trỏ
- Tìm nạp id hóa đơn từ con trỏ - biến tmp_key
- foreach tmp_key tìm id liên hệ chính của khách hàng hóa đơn từ bảng khách hàng
- cập nhật liên hệ khách hàng quan trọng với id liên lạc chính
- con trỏ gần
Dưới đây là mã của tôi:
DECLARE @tmp_key int
DECLARE @get_invckey cursor
set @get_invckey = CURSOR FOR
select invckey from tarinvoice where confirmtocntctkey is null and tranno like '%115876'
OPEN @get_invckey
FETCH NEXT FROM @get_invckey into @tmp_key
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT c.PrimaryCntctKey as PrimaryContactKey
from tarcustomer c, tarinvoice i
where i.custkey = c.custkey and i.invckey = @tmp_key
UPDATE tarinvoice set confirmtocntctkey = PrimaryContactKey where invckey = @tmp_key
FETCH NEXT FROM @get_invckey INTO @tmp_key
END
CLOSE @get_invckey
DEALLOCATE @get_invckey
Làm thế nào để lưu trữ các PrimaryContactKey và sử dụng nó một lần nữa trong tập khoản của báo cáo cập nhật sau đây? Tôi có tạo biến con trỏ hay chỉ một biến cục bộ khác có loại int không?
Như @GilaMonster câu trả lời dưới đây, toàn bộ hoạt động này có thể là một tuyên bố đơn CẬP NHẬT (gọi là "hoạt động thiết lập dựa trên", không nên nhầm lẫn với một [câu lệnh SET t-sql] (https : //msdn.microsoft.com/en-us/library/ms189484.aspx)) là cách tiếp cận tốt hơn nhiều (thực thi nhanh hơn, ít chi phí hơn và ít mã hơn đáng kể). Tôi chỉ chỉ ra điều này vì câu hỏi và tất cả các câu trả lời hàng đầu hiện tại là về cách viết một câu lệnh SET, nhưng nó thực sự không phải là cách tiếp cận tốt nhất để bắt đầu. – gregmac