私はSSISパッケージに取り組んでいます。名前のリストを含む配列があります。それらの名前はテーブル名になります。
これらのテーブルを作成するには、SQLタスクエディターをループして、パラメーター(テーブルの名前)を受け入れるストアドプロシージャを実行します。
ストアドプロシージャのコード:
ALTER PROCEDURE [dbo].[TLP.CreaTable]
(
@TableName VARCHAR(255)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @SQL VARCHAR(4000)
SET @SQL = 'IF NOT EXISTS ( SELECT *
FROM sysobjects
WHERE id = OBJECT_ID(N''[dbo].' + @TableName + ''')
AND xtype in (N''U''))
CREATE TABLE [dbo].' + @TableName + '(
[Serial] [int] NOT NULL,
[Marc] [bit] NOT NULL,
[Sell] [bit] NOT NULL
) ON [PRIMARY]'
EXEC (@SQL)
END
この問題は、配列内の名前の1つが数値である場合に発生します。すべての名前が[]を使用してストアドプロシージャに入ると言わなければなりません。各実行の前にブレークポイントを作成しました。テーブル名が数値の場合、SSIS内でエラーが発生します(また、SQL Server Management Studioからストアドプロシージャを実行した方がよいでしょう。エラーが続く場合は、私はテーブル名[3001]を使用しましたが、これは実際には問題の原因となっている実際の名前です)。
EXEC dbo.[TLP.CreaTable] [3001]
メッセージ170、レベル15、状態1、5行目5行目:「。3001」付近の構文が正しくありません。
私が何かをするなら
EXEC dbo.[TLP.CreaTable] RANDOM_NAME
それは完璧に動作します
どうやらいくつかの「。」があります。途中で。しかし、私はそれをコードで見つけることができません。
ありがとう
編集:
それは引用の問題でした。SQL ServerManagementStudioで機能しました。しかし、SSISで試してみると、エラーが解決しませんでした。[]だけでなく「[]」を追加するようにC#コードを変更しようとしましたが、それでも機能しませんでした。
SSIS内のエラーは次のとおりです。
エラー:0xC002F210、テーブル030698の作成、SQLタスクの実行:クエリ「EXECdbo。[TLP.CreaTable]?」を実行しています 次のエラーで失敗しました:「結果をタイプ(DBTYPE_I4)の変数に抽出中にエラーが発生しました」。考えられる失敗の理由:クエリの問題、「ResultSet」プロパティが正しく設定されていない、パラメータが正しく設定されていない、または接続が正しく確立されていない。
ブレークポイントを使用して、テーブル名の変数を監視しましたが、問題ありませんでした'[3001]'
SQLタスクエディタ内の呼び出しは
EXEC dbo.[TLP.CreaTable] ?
しかし、どういうわけかEXEC dbo.[TLP.CreaTable] '[3001]'
SQL Server Management Studioで機能しますが、SSISの内部では機能しません。
何か案が?ありがとう。
編集2
私はフォーラムにかなり慣れていないので、新しい「質問」でこの2番目の質問をする必要がありますか?主題で発行された問題が解決されたので。どうもありがとう。
編集3
修理済み。CREATE TABLE SQLタスクエディターのパラメーターが長く、varcharに変更され、スムーズになりました。ありがとう