In dem Szenario, in dem Daten von C# als Array an SQL Server gespeichert werden müssen, gibt es viele Möglichkeiten. In diesem Artikel werden je nach verwendeter SQL Server -Version verschiedene Methoden untersucht.
Verwenden von String_Split () oder OpenJSON () können Sie die Trennliste oder JSON an die Speichervorgangsübernahme übergeben.
CREATE PROCEDURE dbo.DoSomethingWithEmployees @List varchar(max) AS BEGIN SET NOCOUNT ON; SELECT value FROM STRING_SPLIT(@List, ','); END GO
CREATE PROCEDURE dbo.DoSomethingWithEmployees @List varchar(max) AS BEGIN SET NOCOUNT ON; SELECT value FROM OPENJSON(CONCAT('["', REPLACE(STRING_ESCAPE(@List, 'JSON'), ',', '","'), '"]')) AS j; END GO
benutzerdefinierte Datentyp- und Tabellenwertparameter werden für die Array -Übertragung verwendet.
CREATE TYPE dbo.IDList AS TABLE ( ID INT ); GO CREATE PROCEDURE dbo.DoSomethingWithEmployees @List AS dbo.IDList READONLY AS BEGIN SET NOCOUNT ON; SELECT ID FROM @List; END GO
// 获取员工 ID int[] employeeIds = GetEmployeeIds(); // 创建 DataTable 并使用员工 ID 填充 DataTable tvp = new DataTable(); tvp.Columns.Add(new DataColumn("ID", typeof(int))); foreach (int id in employeeIds) tvp.Rows.Add(id); // 将 DataTable 作为参数添加 using (conn) { SqlCommand cmd = new SqlCommand("dbo.DoSomethingWithEmployees", conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter tvparam = cmd.Parameters.AddWithValue("@List", tvp); tvparam.SqlDbType = SqlDbType.Structured; tvparam.TypeName = "dbo.IDList"; // 执行查询 }
Einführung in die benutzerdefinierte Demontagefunktion für die Array -Übertragung:
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
CREATE PROCEDURE dbo.DoSomethingWithEmployees @List VARCHAR(MAX) AS BEGIN SET NOCOUNT ON; SELECT EmployeeID = Item FROM dbo.SplitInts(@List, ','); END GO
Das obige ist der detaillierte Inhalt vonWie übergeben Sie ein Array an einen SQL Server gespeicherten Prozedur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!