19 HAZİRAN 2012, Salı
Nasıl bir SQL Server saklı yordamını bir dizi geçirilecek
Nasıl bir SQL Server saklı yordamını bir dizi geçirilecek?
Örneğin, çalışanların listesi var. Bir tablo olarak bu listeyi kullanın ve başka bir tablo ile katılmak istiyorum. Ama liste çalışanları parametre olarak geçirilmesi C#.
CEVAP
19 HAZİRAN 2012, Salı
Bir Liste zaten var olduğundan, XML olduğundan çok daha basit yolları var.
SQL Server 2008 (veya daha yeni)
Öncelikle veritabanınızda aşağıdaki iki nesne oluşturun:
CREATE TYPE dbo.EmployeeList
AS TABLE
(
EmployeeID INT
);
GO
CREATE PROCEDURE dbo.DoSomethingWithEmployees
@List AS dbo.EmployeeList READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT EmployeeID FROM @List;
END
GO
Şimdi C# kod:
DataTable tvp = new DataTable();
// define / populate DataTable from your List here
using (conn)
{
SqlCommand cmd = new SqlCommand("dbo.DoSomethingWithEmployees", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvparam = cmd.Parameters.AddWithValue("@List", tvp);
tvparam.SqlDbType = SqlDbType.Structured;
// execute query, consume results, etc. here
}
SQL Server 2005
Eğer SQL Server kullanıyorsanız, 2005, hala XML ikiye bölünmüş bir fonksiyon tavsiye ederim. İlk olarak, bir işlev oluşturun:
CREATE FUNCTION dbo.SplitInts
(
@List VARCHAR(MAX),
@Delimiter VARCHAR(255)
)
RETURNS TABLE
AS
RETURN ( SELECT Item = CONVERT(INT, Item) FROM
( SELECT Item = x.i.value('(./text())[1]', 'varchar(max)')
FROM ( SELECT [XML] = CONVERT(XML, '<i>'
REPLACE(@List, @Delimiter, '</i><i>') '</i>').query('.')
) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
WHERE Item IS NOT NULL
);
GO
Şimdi saklı yordam olabilir:
CREATE PROCEDURE dbo.DoSomethingWithEmployees
@List VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
SELECT EmployeeID = Item FROM dbo.SplitInts(@List, ',');
END
GO
Ve C# sadece '1,2,3,12'
... . liste kabul kodu
Seçtiğiniz yönteme karşı bu seçenekler bakımı ve performansını karşılaştırmak tavsiye ederim.
Bunu Paylaş:
Nasıl saklı satır içeren varolan bir S...
Nasıl bir sorgu dizesi içinde bir dizi...
Nasıl SQL Server SQL Yürüt Geliştirici...
Nasıl Varlık içinde Saklı Yordamını ça...
Nasıl saklı yordam son değiştirme veya...