首先,在数据库中创建以下两个对象:
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
现在在您的C#代码中:
// Obtain your list of ids to send, this is just an example call to a helper utility function
int[] employeeIds = GetEmployeeIds();
DataTable tvp = new DataTable();
tvp.Columns.Add(new DataColumn("ID", typeof(int)));
// populate DataTable from your List here
foreach(var id in employeeIds)
tvp.Rows.Add(id);
using (conn)
{
SqlCommand cmd = new SqlCommand("dbo.DoSomethingWithEmployees", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvparam = cmd.Parameters.AddWithValue("@List", tvp);
// these next lines are important to map the C# DataTable object to the correct SQL User Defined Type
tvparam.SqlDbType = SqlDbType.Structured;
tvparam.TypeName = "dbo.IDList";
// execute query, consume results, etc. here
}
如果您使用的是SQL Server2005,我仍然推荐使用拆分函数而不是XML。首先,创建一个函数:
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
我正在从Spring中调用一个存储过程,但是我需要向存储过程传递一个字符串数组。然而,到目前为止,我遇到了一个又一个错误。你知道哪里出了问题吗? 我尝试运行以下测试。 这是我得到的stacktrace。
我想通过传递数组_列表来调用sql server存储过程。 最后一行给出了错误。无法在那里设置数组。我也试过使用列表,但没有用。
问题内容: 我有一个具有以下属性的类: 现在,我有一个包含这样的对象的对象, 我需要将此数组列表传递给sql服务器存储过程,并将学生对象数据插入表中。如何在Java中最好地实现这一目标?我需要有一个存储过程。 Java版本8,Sql Server 2014(如果有任何用途)。 问题答案: 使用Mark Rotteveel提供的输入,我能够做到。谢谢马克,肖恩也感谢您的输入。这是可能对您有用的任何人
问题内容: 我需要将字符串数组作为参数传递给MySQL存储例程。该数组可能很长,其元素数量不是固定的。然后,我想将字符串值放入具有一列的内存表中,以便可以处理数据。我不知道这是否可以在MySQL中完成。也许需要肮脏的解决方法。 例如,我有字符串值: 现在,我想从MySQL 表中获取有关这些水果的数据。伪代码: Microsoft SQL Server允许您使用数据类型并将数组作为XML字符串提交,
问题内容: 我在形成文字时可能做错了。假设我有一个简单的存储过程,如下所示: 的定义为: 执行这样的查询: 产生以下结果集: 代替: 我的文字是否有问题,还是应该以其他方式访问该字段?感谢您的任何建议。 问题答案: 指定输入的方式看起来不错,因为使用行和数组构造器语法可以观察到相同的行为: 和: 产生: 如果添加: 在循环内部,输出为: 表明您实际上正在获取一个元组,其中“ message”是您期