動的SQLを使用してストアドプロシージャを作成しています。
私の手順では、同様の列のテーブルを10個ほど言いました。
たとえば、Designation
&Department
tablesを検討すると、Designation
tableには次の列があります。
Designation, Code, EntryBy, EntryOn, ModifiedBy, ModifiedOn
Department
テーブルには次の列があります。
Department, Code, EntryBy, EntryOn, ModifiedBy, ModifiedOn
同様に、他に8つのテーブルがあります。
ストアドプロシージャでは、データを更新してすべてのテーブルに挿入する必要があります。そのため、テーブルごとにupdate&insertステートメントを作成する代わりに、テーブル名をパラメーターとして受け取り、そのテーブルに行が既に存在するかどうかを確認するストアドプロシージャを使用しています。
その行が存在する場合、そのレコードは更新されます。そうでない場合、そのレコードはそれぞれのテーブルに挿入されます。
ALTER PROC UpdateMasterItems
(
@MasterTypeTmp varchar(50),
@NameTmp varchar(50),
@CodeTmp varchar(10))
AS
BEGIN
DECLARE @CntTmp numeric(2,0)
EXEC('select count(*)' + @CntTmp + ' from ' + @MasterTypeTmp + ' where ' + @MasterTypeTmp + ' = ' + @NameTmp)
IF(@CntTmp > 1)
BEGIN
EXEC('UPDATE ' + @MasterTypeTmp + ' SET ' + 'Code = ' + @CodeTmp + ', ModifiedBy = CURRENT_USER, MOdifiedOn = CURRENT_TIMESTAMP WHERE' + @MasterTypeTmp + ' = ' + @NameTmp)
RETURN 10
END
ELSE
BEGIN
EXEC('INSERT INTO ' + @MasterTypeTmp + '(' + @MasterTypeTmp + ', Code, EntryBy, EntryOn, ModifiedBy, ModifiedOn ) VALUES (' + @NameTmp + ',' + @CodeTmp + ',' + 'CURRENT_USER, CURRENT_TIMESTAMP, CURRENT_USER, CURRENT_TIMESTAMP )')
RETURN 11
END
END
@MasterTypeTmp
テーブル名はどこにありますか( Department
/ Designation
.....にすることができます)
手順の実行中にエラーが発生します:
Execステートメント:
EXEC UpdateMasterItems 'Designation', 'TestName', 'TestCode'
エラーステートメント:
無効な列名'TestName'。
列名'TestCode'が無効です。
ただし、TestName
&TestCode
は列名ではありません。これらは列の値です。動的クエリが間違っているか、問題がどこにあるかを教えてください。
前もって感謝します
ムーニカ