Ich arbeite mit SQL Server 2005 und hatte eine Situation, in der viele Werte in einem Parameter übergeben werden können.
Basierend darauf: Bei der Übergabe mehrerer Werte für einen SQL-Parameter wird bei dieser Prozedur XML als Parameter verwendet.
Hier ist der Code der gespeicherten Prozedur:
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
Weitere Informationen zu diesem Verfahren finden Sie hier
Dies ist ein Beispiel dafür, wie es genannt werden kann:
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
Frage:
Was ist der beste Weg, um herauszufinden, ob der Parameter @ListNoteTypeCode XML
leer ist oder nicht ?
Was ist, wenn sie diese Prozedur so nennen:
declare @p5 int set @p5=86400
exec DenormV2.udpProductBulletPointSelectByTier1NoteTypeCode
@Tier1=N'WW099',
@LanguageID=3,
@SeasonItemID=N'16AUT',
@ListNoteTypeCode=N'',
@CacheDuration=@p5 output select @p5
Wie hier vorgeschlagen , konnte ich die Auswahl durch Testen des Parameters insgesamt vermeiden @ListNoteTypeCode
.
Mein Hauptziel in diesem Szenario ist es, die Daten mit der bestmöglichen Leistung abzurufen, da dieses Verfahren nicht auf den Webservern zwischengespeichert wird und über eine Million Mal am Tag aufgerufen wird.