2010-01-03 196 views

回答

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更多細節出臺。

+1

感謝您的解決方案,它解決了我的問題 – Mada 2010-01-03 21:43:40

2

是的,只要設置一個默認值:

CREATE PROCEDURE SomeProc 
    @SomeParam int, 
    @SomeParam2 varchar(20) = 'Test Text' 
AS 
... 

然後,你可以爲執行:

EXEC SomeProc 1 
0

一些方法..

默認值 表變量 CLR存儲過程 分隔字符串

做到這一點
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> 
+1

YIKES! SQL Server 2005引入了大大改進的XQuery支持 - 拋棄那些舊的蹩腳的OPENXML方法,並使用(xml).nodes,(xml).value,(xml).query方法! – 2010-01-03 21:35:32