質問

  • C# で大きなプロジェクト (関数がたくさん) を作成することは可能ですか?
  • CLR アセンブリを作成してから、
  • SQL Server IN A STORED PROC で、アセンブリ内の関数を呼び出します。
  • テーブル (ASSEMBLY に渡す) は、他のストアド プロシージャで計算されます。

    • その場合、どのような手順になりますか?

こんなことを考えています。

-- I have a stored proc that gets a table, let it be myStoredProcTable

--FIST ENABLE DATA ACCESS
EXEC sp_serveroption 'TheServerName', 'DATA ACCESS', TRUE

--main.sql calls yStoredProcTable.sql and the calls functionAssembly
SELECT  *
INTO    #tmpTable
FROM    OPENQUERY(SERVERNAME, 'EXEC test.dbo.myStoredProcTable 1')


-- pass the table to assembly
-- how would i pass the table to assembly code?, Is this POSSIBLE?
    EXEC functionAssembly #tmpTable

- - - - - - - - - - - - - - - - - - - - - 編集

続く @faester 答え:- コード内で XML を使用するにはどうすればよいでしょうか。 numberTOstring 事だけど、たぶん XML ここのオプションは最高です...

繰り返しますが、たとえそれが最善の選択ではなかったとしても、私は実際にこれを実行します...

役に立ちましたか?

解決

はい、アセンブリを登録することはできますが、パフォーマンスの問題により、それが良い考えになることはほとんどありません。

ただし、スカラー値に対して複雑な数値計算や同様の操作を行う場合には、大きな柔軟性が得られます。ただし、SQL はネイティブのセット指向であるのに対し、C# はそうではないという問題が残り、不一致が発生しやすくなります。

また、静的クラスの静的メンバーのみをインポートできることにも注意してください。

しかし、このクラスの例は、名前空間にクラスをインポートすることは不可能であるため、意図的に名前空間を持っていません。

    public static class Math
    {
        [Microsoft.SqlServer.Server.SqlFunction]
        public static int Add(int a, int b)
        {
            return a + b;
        }


        [Microsoft.SqlServer.Server.SqlProcedure]
        public static void Void(int a, int b)
        {
        }
    }

サーバーを準備するには SQL が必要で、おそらく管理者である必要があります。

    EXEC SP_CONFIGURE 'clr enabled', 1
    GO
    RECONFIGURE
    GO
    -- CONSIDER: DROP ASSEMBLY SqlClr
    GO
    CREATE ASSEMBLY SqlClr 
    FROM 'pathtoassembly'
    WITH PERMISSION_SET = SAFE;
    GO
    SELECT * FROM sys.assemblies
    GO
    CREATE FUNCTION [MathAdd] (@a int, @b int)
    RETURNS INT 
    AS EXTERNAL NAME [SqlClr].Math.[Add]
    GO 
    CREATE PROCEDURE [Void] @a INT, @b INT
    AS EXTERNAL NAME [SqlClr].Math.[Void]
    GO 
    SELECT dbo.MathAdd (1, 2)
    EXEC void 1, 2

また:あなた 本当に これが必要であることを確信してください。それが良い考えであることはほとんどありません。(DNS ルックアップなどの電子メール検証に一度使用したことがありますが、それはすべてのビジネス ロジックが SQL で書かれているシステム上でした。そしてそれは悪いことです!)

役立つ参考資料:

http://msdn.microsoft.com/en-us/library/ms189524.aspx

http://www.codeproject.com/KB/database/CLR_in_Sql_Server_2005.aspx

他のヒント

使用 SQL CLR 説明したとおりの機能を実行します。

可能です. 。(ただし、コメントを読んでください)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top