Tôi gần như đã hoàn tất việc thay đổi thủ tục được lưu trữ dựa trên con trỏ thành dựa trên tập hợp. Hầu như, bởi vì tôi chỉ còn một điều để tìm ra.Câu lệnh UPDATE sử dụng EXEC để thực thi một thủ tục đã lưu để SET một giá trị cột
Chúng sử dụng thủ tục được lưu trữ được gọi là GetSequence
để truy vấn bảng, cập nhật bảng bằng số thứ tự mới (cũ + 1) và trả về giá trị số thứ tự mới. Đây không phải là vấn đề khi họ sử dụng con trỏ vì chúng đã gán giá trị đầu ra cho một biến, sau đó sử dụng biến.
Cách duy nhất tôi có thể nghĩ để giữ bộ quy trình được lưu trữ mới dựa trên là thực thi GetSequence
trong câu lệnh INSERT hoặc UPDATE. Tuy nhiên, tôi nhận được lỗi tuyệt vời cụ thể đó, "cú pháp sai gần từ khóa 'EXEC'", khi tôi thử điều đó.
Đây là mã cũ:
DECLARE @new_UD_campaignID BIGINT -- Get the new ud_lead_id for the new lead set
EXEC ppGlobal.dbo.Getsequence
'ud_campaign_id',
@new_UD_campaignID OUTPUT
DECLARE @OrderNum VARCHAR(9);
IF @corpCamp LIKE '%LEP%'
BEGIN
SELECT @OrderNum = ('L' + RIGHT('00000000' + CAST(@new_UD_campaignID AS VARCHAR(8)), 8))
END
ELSE
BEGIN
SELECT @OrderNum = ('C' + RIGHT('00000000' + CAST(@new_UD_campaignID AS VARCHAR(8)), 8))
END
này hoạt động, nhưng là rất chậm vì nó nằm trong một con trỏ và cập nhật hơn hai triệu hàng.
vẻMã mới tôi đang cố gắng như thế này:
UPDATE @List
SET OrderNumBigInt = EXEC (ipCore.dbo.Getsequence
'ud_campaign_id',
@new_UD_campaignID OUTPUT)
tôi không thể tìm thấy bất kỳ tài liệu hướng dẫn cụ thể cho biết bạn không thể thực hiện một thủ tục được lưu trữ trong một câu lệnh SELECT hoặc UPDATE để thiết lập một giá trị cột.
Có ai đã thử một cái gì đó tương tự, nhưng với sự thành công?
Phiên bản SQL Server nào? – JNK
Cũng có lý do bạn không thể tạo UDF cho proc thu được của mình để trả về giá trị? – JNK
SQL Server 2008 R2 – JerryK