SORU
17 Mart 2009, Salı


İçerir kullanırken 2100 parametre sınırı (SQL Server) vurmak()

from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME

depts listesi (IEnumerable<int>) kimlikleri bölümü

Bu sorgu hata büyük bir liste (yaklaşık 3000 dept kimlikleri söylüyorlar) .. o zaman geçene kadar gayet iyi çalışıyor:

Gelen sekmeli veri akışı (TDS) uzaktan yordam (RPC) iletişim kuralının akışı yanlış diyoruz. Çok fazla parametre bu RPC isteği verilmiştir. Maksimum 2100.

Benim sorgulamak için değiştirdim:

var dept_ids = string.Join(" ", depts.ToStringArray());
from f in CUSTOMERS
where dept_ids.IndexOf(Convert.ToString(f.DEPT_id)) != -1
select f.NAME

IndexOf() kullanarak hata düzeltildi ama sorgu yavaş yaptı. Bunu çözmenin başka bir yolu var mı? çok teşekkür ederim.

CEVAP
17 Mart 2009, Salı


Neden sql sorgu yazma ve varlık takmak değil mi?

Seri çalıştım beri süre oldu, ama burada gider:

IQuery q = Session.CreateQuery(@"
         select * 
         from customerTable f
         where f.DEPT_id in ("   string.Join(",", depts.ToStringArray())   ")");
q.AttachEntity(CUSTOMER);

Elbette, enjeksiyon karşı korumak gerekir, ama bu çok zor olmamalı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lena Danya

    Lena Danya

    11 NİSAN 2010
  • RawBrahs

    RawBrahs

    28 Aralık 2010
  • Video Copilot

    Video Copilo

    21 EYLÜL 2006