1

私は大きな問題を抱えており、何を確認すればよいかさえわかりません。最初に「スクリプトの実行」タスク (ST_2275f0b3eced4c84bd35d4c826cab866.csproj という名前) を実行する大きな SSIS パッケージがあり、C# で次のように記述されています。

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using Microsoft.Win32;

namespace ST_2275f0b3eced4c84bd35d4c826cab866.csproj
{
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
public void Main()
        {

            Dts.Variables["user_uca"].Value = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\TDCredentials").GetValue("user_uca").ToString();

            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }
}

要点は、特定の Windows レジストリ キーからのデータを使用して SSIS パッケージ変数を読み込むことです。問題は、Visual Studio から SSIS パッケージを実行したときに動作することです。しかし、その SSIS パッケージ用に作成された Sql Agent ジョブを実行すると、次のエラーが表示されます: System.Reflection.TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。---> System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。ST_2275f0b3eced4c84bd35d4c826cab866.csproj.ScriptMain.Main() でこのエラーは、Windows レジストリ キーが存在しないことを意味します。特定の Windows レジストリ キーを意図的に削除してから、Visual Studio から SSIS パッケージを実行すると、正確なエラー メッセージが表示されるためです。私ができることをすべてチェックしました:それらのWindowsレジストリキーを持つSQLサーバーとホスト-それらは同じです。また、これらのキーに「Everyone」のアクセス許可を与えました。また、すべてのユーザーにキーが存在することを確認するために、HKLocalMachine にキーを配置しましたが、同じエラーが発生しました。ヒントはありますか?! 前もってありがとう、ボグダン。

4

2 に答える 2

1

この問題は、最終的には権限の問題です。SQL エージェントを実行するサービス アカウントまたは SSIS のサブシステム ジョブ ステップを実行している資格情報には、レジストリのその部分を読み取る機能がありません。

そのユーザー アクセスを許可するか、レジストリから読み取ることができるデリゲートを作成する必要があります。

ちなみに、スクリプト アプローチを使用する必要はありません。レジストリ値を読み取って変数に割り当てることは、SSIS のネイティブ機能です。このトピックの詳細については、構成を参照してください。アクセス許可の問題に対処する必要がありますが、パッケージ全体にコードをコピーして貼り付ける必要はありません。

于 2013-07-23T15:30:39.900 に答える
0

前述のとおり、SQL エージェント ジョブを実行していたアカウントの権限の問題でした。したがって、解決策は、最初に「資格情報」->「新しい資格情報」から新しい資格情報を作成することでした。「ID」フィールドで、sysadmin 権限を持つユーザー (例: john.doe) を選択します。「資格情報名」フィールドに「John」と入力しました。次に、Sql Server Agent -> Proxies -> SSIS Package Execution から「新しいプロキシ」を作成しました。「プロキシ名」に名前(ProxyJohn)を入力し、「資格情報名」で初期に定義された資格情報「John」を選択し、「次のサブシステムに対してアクティブ」フィールドで「Sql Server Integration Services Package」をチェックしましたオプション。次に、私のSql Server Agent -> Jobsで、私の仕事で(実行時にエラーメッセージが表示されました)、

それが役立つことを願っています。よろしく、 ボグダン

于 2013-07-24T07:55:09.187 に答える