2010-01-03 8 views

Répondre

0

Oui, vous pouvez écrire une procédure stockée dans C# ou VB.NET et l'inclure en tant que procédure stockée SQLCLR.

Une méthode C# peut accepter un paramètre params de longueur variable.

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........ 
     } 
    } 
} 

Le CLR SQL - l'inclusion du moteur d'exécution .NET dans SQL Server - a été introduit avec SQL Server 2005. Voir la MSDN docs pour plus de détails.

+1

Merci pour votre solution, il a résolu mon problème – Mada

2

Oui, situé juste à une valeur par défaut:

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

Vous pouvez alors exécuter comme:

EXEC SomeProc 1 
0

Oui, cela est possible. Quand j'en avais besoin, j'ai utilisé Arrays and Lists in SQL Server. Il vous guidera à travers les détails de quelques approches différentes.

0

Certaines méthodes ..

par défaut des valeurs Table des variables magasin CLR procédures chaînes délimitées

0

Une façon de le faire est en utilisant 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 

Ensuite, votre xml regarderait comme ceci:

<root> 
    <param> 
     <paramname>thisparam</paramname> 
     <paramvalue>1</paramvalue> 
    </param> 
</root> 
+1

YIKES! SQL Server 2005 a considérablement amélioré le support de XQuery - jetez ces vieilles méthodes OPENXML merdiques et utilisez les méthodes (xml) .nodes, (xml) .value, (xml) .query à la place !! –

Questions connexes