Tôi đang làm việc với máy chủ sql 2005 và tôi đã gặp tình huống có thể truyền nhiều giá trị trong một tham số.
Dựa trên điều này: Truyền nhiều giá trị cho một tham số SQL , quy trình này sử dụng XML làm tham số.
đây là mã của thủ tục được lưu trữ:
CREATE PROCEDURE [DENORMV2].[udpProductBulletPointSelectByTier1NoteTypeCode] (
@Tier1 VARCHAR(10),
@LanguageID INT,
@SeasonItemID VARCHAR(5) = NULL,
@ListNoteTypeCode XML,
@CacheDuration INT OUTPUT )
WITH EXECUTE AS 'webUserWithRW'
AS
SELECT pbp.Tier1, pbp.LanguageId, pbp.NoteText, pbp.NoteTypeCode,
pbp.NoteGroup, pbp.SortOrder
FROM dbo.ProductBulletPoint pbp
WHERE Tier1 = @Tier1
AND LanguageId = @LanguageID
AND ( SeasonItemId = @SeasonItemID
OR
@SeasonItemID is null
)
AND pbp.NoteTypeCode IN (
SELECT NoteTypeCode=BulletPoint.NoteTypeCode.value('./text()[1]', 'varchar(50)')
FROM @ListNoteTypeCode.nodes('/BulletPoint/NoteTypeCode') AS BulletPoint ( NoteTypeCode )
)
SELECT @CacheDuration = Duration
FROM dbo.CacheDuration
WHERE [Key] = 'Product'
GO
Thông tin thêm về thủ tục này tại đây
đây là một ví dụ về cách nó có thể được gọi là:
declare @p5 int set @p5=86400
exec DenormV2.udpProductBulletPointSelectByTier1NoteTypeCode
@Tier1=N'WW099',
@LanguageID=3,
@SeasonItemID=N'16AUT',
@ListNoteTypeCode=N'<BulletPoint><NoteTypeCode>GarmentComposition</NoteTypeCode><NoteTypeCode>FootwearAccessoryComposition</NoteTypeCode></BulletPoint>',
@CacheDuration=@p5 output select @p5
Câu hỏi:
cách tốt nhất để tìm hiểu xem tham số @ListNoteTypeCode XML
có trống hay không?
Điều gì xảy ra nếu họ gọi thủ tục này như thế này:
declare @p5 int set @p5=86400
exec DenormV2.udpProductBulletPointSelectByTier1NoteTypeCode
@Tier1=N'WW099',
@LanguageID=3,
@SeasonItemID=N'16AUT',
@ListNoteTypeCode=N'',
@CacheDuration=@p5 output select @p5
như đã đề xuất ở đây tôi có thể tránh việc chọn hoàn toàn bằng cách kiểm tra tham số @ListNoteTypeCode
.
Mục tiêu chính của tôi trong kịch bản này là lấy dữ liệu với hiệu suất tốt nhất có thể, vì quy trình này không được lưu trong bộ máy chủ web và được gọi hơn một triệu lần mỗi ngày.