SQL Server 内の CLR アセンブリ C#
-
28-10-2019 - |
質問
- 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