1
INSERT INTO [DEV_BI].dbo.[DimAktivitet]([Beskrivning],[företag],[Projektnummer],[Aktivitet],
            loaddate)
SELECT NULL,
       a.DATAAREAID,
       a.PROJID,
       a.MID_ACTIVITYNUMBER,
       GETDATE()
FROM [?].dbo.[v_ProjCostTrans_ProjEmplTrans] a
LEFT OUTER JOIN [DEV_BI] .dbo.[DimAktivitet] b ON a.MID_ACTIVITYNUMBER = b.Aktivitet
AND a.DataAreaID = b.företag
AND a.ProjID = b.Projektnummer
WHERE b.Aktivitet_key IS NULL

SQL実行タスクに上記のSQLコードがあり、パラメーターマッピングで、データ型 nvarchar 、パラメーター名= 0の user::connectionstring という名前の変数をマップしました。この次のエラーが発生します。

[SQL タスクの実行] エラー: クエリ "insert into [DEV_BI].dbo.[DimAktivitet]([Beskrivni...") の実行が次のエラーで失敗しました: "無効なオブジェクト名 '?.dbo.v_ProjCostTrans_ProjEmplTrans'.".失敗の理由: クエリの問題、「ResultSet」プロパティが正しく設定されていない、パラメーターが正しく設定されていない、または接続が正しく確立されていない。

誰かがこれを解決するのを手伝ってください。

4

1 に答える 1

2

変数に基づいてデータベースを変更しようとしているようです。SQL 実行タスクは、WHERE 句のフィルターとしてのみパラメーターを使用できます。この動作については、この TechNet 記事で説明されています。たとえば、次のようにします。

insert into [DEV_BI].dbo.[DimAktivitet]([Beskrivning],[företag],[Projektnummer],[Aktivitet],loaddate)  
select null,a.DATAAREAID,a.PROJID,a.MID_ACTIVITYNUMBER,GETDATE() from 
[DEV_BI].dbo.[v_ProjCostTrans_ProjEmplTrans] a 
left outer join 
[DEV_BI] .dbo.[DimAktivitet] b
on a.MID_ACTIVITYNUMBER = b.Aktivitet AND a.DataAreaID = b.företag AND a.ProjID = b.Projektnummer
where b.Aktivitet_key is null
AND b.SomeFilterCriteria = ?;

変数に基づいてデータベースを変化させたい場合は、次の 3 つのオプションがあります。

  1. ブログ投稿 で説明されている式に基づいて、接続マネージャーの接続文字列をデータベース接続に変更します。これは、データベースのみを変更し、他には何も変更しない場合に最適なソリューションです。

  2. 変数を Execute SQL Command に渡す代わりに、SQL コード全体を変数として生成し、変数を SQL コマンドとして実行します。これについては、このブログ投稿の「変数から SQL ステートメントを渡す」セクションで説明されています。

  3. ストアド プロシージャを作成し、パラメータをストアド プロシージャに渡し、必要な SQL をオンザフライで生成します。

于 2013-04-01T19:48:29.453 に答える