SQL Server存储过程

时间:2010-01-03 21:17:41

标签: sql-server sql-server-2005

是否可以编写使用可变数量参数的存储过程? (在SQL Server 2005中)

5 个答案:

答案 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>