Geçen Listesi<> Saklı Yordam SQL
Genellikle veritabanında belirli bir kayıt için birden çok öğe yüklemek zorunda kaldım. Örneğin: bir web sayfası görüntüler öğeleri dahil etmek için bir tek rapor, hangi veritabanındaki kayıtları (Rapor kaydı Raporu tablo öğelerdir kayıtları Madde tablo). Bir kullanıcı öğeleri bir web uygulaması üzerinden tek bir rapor eklemek için seçerek, hadi 3 öğe seçin ve Gönder deyin. Süreci bir tablo rapor öğeleri (Reportİd,İçeren) kayıtları ekleyerek bu rapor için bu 3 öğe ekleyecektir.
Şu anda, kod böyle bir şey yapardım:
public void AddItemsToReport(string connStr, int Id, List<int> itemList)
{
Database db = DatabaseFactory.CreateDatabase(connStr);
string sqlCommand = "AddItemsToReport"
DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
string items = "";
foreach (int i in itemList)
items = string.Format("{0}~", i);
if (items.Length > 0)
items = items.Substring(0, items.Length - 1);
// Add parameters
db.AddInParameter(dbCommand, "ReportId", DbType.Int32, Id);
db.AddInParameter(dbCommand, "Items", DbType.String, perms);
db.ExecuteNonQuery(dbCommand);
}
ve bu Saklı yordam:
INSERT INTO ReportItem (ReportId,ItemId)
SELECT @ReportId,
Id
FROM fn_GetIntTableFromList(@Items,'~')
İşlevi tam sayılardan oluşan bir sütun bir tablo döndürür.
Bu benim sorum: daha iyi bir şekilde böyle bir şey işlemek için var mı? Not,, benim sorum özellikle kodu ile ilgili olmadığı gibi veritabanı normalleştirme ya da bir şey sormuyorum.
CEVAP
Eğer SQL Server 2008 olacak sizin için bir seçenek ise, "değerli Tablo" tam olarak bu sorunu çözebilmek için parametreleri olarak adlandırılan yeni bir özelliği var
Daha fazla bilgi here here kontrol IZLEMEK ya da sadece 2008-değerli tablo parametreleri bilgi bol bulabilirsiniz ve örnekleri." - Server "SQL için Google sor
Şiddetle tavsiye edilir -eğer2008... SQL Server'a taşıyabilirsiniz
C# SQL Server saklı yordam için bir li...
Geçen bir saklı yordam parametreleri b...
Nasıl bir saklı yordam oluşturmadan ön...
Saklı yordam yavaş web çağrıldığında, ...
Geçici Tabloya yerleştirin Saklı Yorda...