7

私が読んだすべてのことは、マネージストアドプロシージャを作成するときに、Visual Studio で右クリックしてデプロイを選択することを示しています。これで問題なく動作しますが、Visual Studio の外部のさまざまな場所に展開したい場合はどうすればよいでしょうか? プロジェクトがSQLで構築したdllでアセンブリを作成しようとしましたが、アセンブリを追加しましたが、アセンブリからプロシージャを作成しませんでした。Visual Studio を使用せずに、SQL で直接これを行う方法を見つけた人はいますか?

4

2 に答える 2

6

アセンブリDLLファイルをさまざまなサーバーのローカルドライブにコピーします。次に、アセンブリをデータベースに登録します。

create assembly [YOUR_ASSEMBLY]
from '(PATH_TO_DLL)'

...次に、DLL内の適切なパブリックメソッドを参照する関数を作成します。

create proc [YOUR_FUNCTION]
as
external name [YOUR_ASSEMBLY].[NAME_SPACE].[YOUR_METHOD]

特にNAME_SPACEの前後には、必ず[括弧を使用してください。名前空間には任意の数のドットを含めることができますが、部分が角かっこで明示的に区切られていない限り、SQL識別子には含めることができません。これは、私が最初にSQLCLRを使用したときの多くの頭痛の種でした。

明確にするために、[YOUR_ASSEMBLY]はSQLで定義した名前です。[NAME_SPACE]は、メソッドを見つけることができるDLL内の.NET名前空間です。[YOUR_METHOD]は、単にその名前空間内のメソッドの名前です。

于 2008-09-23T23:24:38.703 に答える
2

上記の@kcrumleyのanwserに詳細/説明を追加するには:

[NAME_SPACE] は名前空間だけでなく、完全修飾型名
です。つまり、クラスがStoredProceduresの名前空間で呼び出される場合は、[NAME_SPACE] 部分にMy.Name.Space使用する必要があります。[My.Name.Space.StoredProcedures]

マネージ ストアド プロシージャが名前空間が定義されていないクラスにある場合は、そのままのクラス名 (例: [StoredProcedures]) を使用します。

また、引数/パラメーターを使用してプロシージャを追加する方法を考え出すのに少し苦労しました。したがって、そうしようとしている他の人のためのサンプルを次に示します。

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int,
    @parameter2 nvarchar
) 
WITH EXECUTE AS CALLER 
AS
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
于 2010-05-20T13:45:10.637 に答える