Öğe adı için değişken


9

Tamam çalışan bu tSQL kodu var:

SELECT 
c.logguid,
a.b.value('./PropertyValue', 'varchar(max)') asd
  FROM [dnn].[dbo].[EventLog2] c

cross apply sss.nodes('/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y")]') as a(b)

Ancak, yapabilmek istediğim, her biri arasında OR'd olan birçok değer çiftinin dinamik bir listesine geçmek, yani

SELECT 
c.logguid,
a.b.value('./PropertyValue', 'varchar(max)') asd
  FROM [dnn].[dbo].[EventLog2] c

cross apply sss.nodes(
'/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y")
or
PropertyName=sql:variable("@a") and PropertyValue=sql:variable("@b")
]'
) as a(b)

Bunu yapmanın bir yolu var mı?


1
Anladığımdan emin olmak için @c ve @d vb. De olabilir mi?
wtjones

Yanıtlar:


2

Değişken listesi veya dizi gerektiren herhangi bir parametre muhtemelen kullanıcı tanımlı bir tablo türü için iyi bir adaydır. Ben türü oluşturmak istiyorum:

CREATE TYPE [PropertyVariableTableType] AS TABLE (
    PropertyName nvarchar(255),
    PropertyValue nvarchar(255) )

Tablo türleri, diğer tüm türler gibi saklı yordamlara parametre olarak kullanılabilir. Daha sonra, kullanıcı tanımlı tabloda birleştirebilir veya sorguyu dinamik olarak oluşturmak için satırları yineleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.