是否可以编写使用可变数量参数的存储过程? (在SQL Server 2005中)
答案 0 :(得分:2)
是的,只需设置默认值:
CREATE PROCEDURE SomeProc
@SomeParam int,
@SomeParam2 varchar(20) = 'Test Text'
AS
...
然后你可以执行:
EXEC SomeProc 1
答案 1 :(得分:0)
是的,这是可能的。当我需要这个时,我使用了Arrays and Lists in SQL Server。它将引导您了解几种不同方法的细节。
答案 2 :(得分:0)
是的,您可以在C#或VB.NET中编写存储过程并将其作为SQLCLR存储过程包含在内。
C#方法可以接受可变长度的params
参数。
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[SqlProcedure()]
public static void InsertSomeValues(SqlString currencyCode,
SqlString name,
params object[] args)
{
using (SqlConnection conn = new SqlConnection("context connection=true"))
{
...... do whatever you need to do here........
}
}
}
SQL CLR - 将.NET运行时包含在SQL Server中 - 是随SQL Server 2005引入的。有关详细信息,请参阅MSDN docs。
答案 3 :(得分:0)
一些方法..
默认值 表变量 CLR商店程序 分隔字符串
答案 4 :(得分:0)
一种方法是使用XML:
CREATE PROC dbo.GetOrderList (
@OrderList varchar(max)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @DocHandle int
DECLARE @TBL TABLE (
paramname varchar(50),
paramvalue varchar(50)
)
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @OrderList
INSERT INTO @TBL (
paramname,
paramvalue
)
SELECT
paramname,
paramvalue
FROM OPENXML (@DocHandle, '/ROOT/param', 1) WITH (
paramname,
paramvalue
)
EXEC sp_xml_removedocument @DocHandle
END
GO
GRANT EXEC ON dbo.GetOrderList TO public
GO
然后你的xml看起来像这样:
<root>
<param>
<paramname>thisparam</paramname>
<paramvalue>1</paramvalue>
</param>
</root>