T-SQLトリガーの発射は、"カラムの名称又は番号の提供価値に一致"しないテーブル定義"エラー
質問
こちらがっていないということが、私た 随所に.もうここまでです!
いテーブルと呼ばれdandb_raw三列特に次の点が重要です。dunsId(PK)、氏名、searchName.また、いつまでトリガする行為のこのテーブル:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dandb_raw_searchNames]
ON [dandb_raw]
FOR INSERT, UPDATE
AS
SET NOCOUNT ON
select dunsId, name into #magic from inserted
UPDATE dandb
SET dandb.searchName = company_generateSearchName(dandb.name)
FROM (select dunsId, name from #magic) i
INNER JOIN dandb_raw dandb
on i.dunsId = dandb.dunsId
--Add new search matches
SELECT c.companyId, dandb.dunsId
INTO #newMatches
FROM dandb_raw dandb
INNER JOIN (select dunsId, name from #magic) a
on a.dunsId = dandb.dunsId
INNER JOIN companies c
ON dandb.searchName = c.searchBrand
--avoid url matches that are potentially wrong
AND (lower(dandb.url) = lower(c.url)
OR dandb.url = ''
OR c.url = ''
OR c.url is null)
INSERT INTO #newMatches (companyId, dunsId)
SELECT c.companyId, max(dandb.dunsId) dunsId
FROM dandb_raw dandb
INNER JOIN
(
select
case when charindex('/',url) <> 0 then left(url, charindex('/',url)-1)
else url
end urlMatch, * from companies
) c
ON dandb.url = c.urlMatch
where subsidiaryOf = 1 and isReported = 1 and dandb.url <> ''
and c.companyId not in (select companyId from #newMatches)
group by companyId
having count(dandb.dunsId) = 1
UPDATE cd
SET cd.dunsId = nm.dunsId
FROM companies_dandb cd
INNER JOIN #newMatches nm
ON cd.companyId = nm.companyId
GO
トリガの原因に挿入しますが失敗す:
insert into [dandb_raw](dunsId, name)
select 3442355, 'harper'
union all
select 34425355, 'har 466per'
update [dandb_raw] set name ='grap6767e'
このエラー:
Msg 213, Level 16, State 1, Procedure companies_contactInfo_updateTerritories, Line 20
Insert Error: Column name or number of supplied values does not match table definition.
最も興味深い事実ではないですが、それぞれの個別諸表のトリガーの作品。そのほとんどが挿入されますが、ここではあるテーブルに感染ーしようとした場合の移動に挿入されていない。
この原因はトリガが?どのようになると思いますか。
解決
と思いDavid、チェルボの複合影響問題についてはこちら。
んの一部で何が起きているかったのに使用していましたので#newMatches複数のをトリガーとする。がトリガーの変更も行う火の他のトリガー、ツールを使おうとするであろうとの接続scoped#newMatches.
その結果、において、テーブルが存在していた異なるスキーマ、型、メッセージです。一つの証拠とされる傾向にあるということ:は挿入用スタックのスタイルスコ(トリガ独自のinserteds?)
まだ思惑が少なくとももうするとされる。
他のヒント
何companies_contactInfo_updateTerritories?実際の参考に記載の手順"companies_contactInfo_updateTerritories"が見つからないので、コードに付与する。もし見つからない場所で呼び出されます。ない限り、アプリケーションは呼び出しのSQLが不可となります。...
場合は試験べたところ、うまくいったのでもうまくいきませんでし何とかしてほしいけどなければならないと思います。一つのことを考えることは,セキュリティです。いあなただけのテーブル[dandb_raw]は[dbo].[dandb_raw].ここでは、ユーザーがテーブルに同じ名前の[ユーザ].[dandb_raw]、テーブルチェックに使用される定義ではなく表しています。また、トリガを作成し温ます。もし一部の温度テーブルが既に存在して何らかの理由で異なる定義がすることも問題です。
と思いますか、明らかな問題のコードです。
"を選択し..は"弱いkung-fu.み明示的に作成、温度のテーブル定義:
CREATE TABLE #newMatches
(
CompanyID int PRIMARY KEY,
DunsID int
)
できたらと#newMatchesきなくな部として購入することができますので何度も(温度テーブルが接続scoped!!)
DROP TABLE #newMatches
トリガーコードなければならないので、実行の詳細データが更新されな効率を考慮する必要があり複数を記録しました。まことに成功したものではない。またこの複雑化していなどを利用しない計算書にすることを可能性にすることが少なefficeint以上に残ります。温度テーブルが不要なここを使うと、トリガーとして追加の非効率性のトリガが発生します。ありませんしない理由を書く から挿入したい の代わりに から選択dunsId、名前から#マジック)
最初がや簡単な読みを維持します。
こちら:JOINを選択する場合charindex('/',url) <>0then左(url charindex('/',url)-1)else url末urlMatch,*企業からcにdandb.url=c.urlMatch
ご選択のすべてのフィールドのテーブルのものだけを使用していると思われる。なぜですか?でもその場合はstamentにあるすべてのレコード会社後であっても、ご参加は必要ないかもしれませんが、全員について記入してください。
もそろっていないものを使用を選択※が特にトリガが発生します。例えば、皆さんがを挿入した別のテーブルをご使用の選択*から一部テーブルへの参加に挿入または削除されます。追加の列がテーブルの原因となるトリガーが停止すべてのデータの変化までを修正しました。
んで使用する機能のトリガが発生します。このcoudlきりにも遅い場合havea大をサポートしていません。ていただきたいテストが更新による大きなグループの記録、何が起こるか見てみてください.すべてのデータが変化しないが、これらの中からユーザインタフェース、記録します。することがありますが、一つの分野の更新からのアドホック検索の経営スタジオ(すべての価格を調整する必要がありますが10%として最も単純な例と考えられる。) おトリガーのニーズに対応しきれているので、それらが更新どものおや文化を用いて作られています。私はラテストケースの更新100000行となったこのトリガ遅くする。
このようになっていた個々の問題がトリガで離れたところで、こんなにから最適なっています。