私はカーソルを使用せずに実装する必要がある設計上の懸念があります。T-SQLのカーソルに最適な代替品は何ですか?
varchar
データ型のすべての列を持つソーステーブル 'A'があります。私はそれらを反復し、各列を宛先テーブルのデータ型に変換し、変換/解析が失敗した場合、その行を余分なエラーテーブルに記録する必要があります。
今後のアドバイスは参考になります。
私はカーソルを使用せずに実装する必要がある設計上の懸念があります。T-SQLのカーソルに最適な代替品は何ですか?
varchar
データ型のすべての列を持つソーステーブル 'A'があります。私はそれらを反復し、各列を宛先テーブルのデータ型に変換し、変換/解析が失敗した場合、その行を余分なエラーテーブルに記録する必要があります。
今後のアドバイスは参考になります。
In Sql Server 2012以降:エラーの代わりに変換が失敗した場合、これらはそれぞれnull
を返します。
変換がintに失敗するであろうすべてのvarcharcol
の例:
select id, varcharcol
from a
where try_convert(int,varcharcol) is null
をSQL Serverでは、あなたWOU LDの使用try_convert()
:次に
insert into t2 (. . .)
select . . .
from (select try_convert(?, col1) as col1,
try_convert(?, col1) as col2,
from staging_t
) t
where col1 is not null and col2 is not null and . . .;
値がNULL
ある行を取得する2番目のクエリを実行します。
NULL
がステージング欄の許容値がある場合は、これはもう少し複雑です:
insert into t2 (. . .)
select new_col1, new_col2, . . .
from (select try_convert(?, col1) as new_col1, col1,
try_convert(?, col1) as new_col2, col2,
from staging_t
) t
where (new_col1 is not null or col1 is null) and
(new_col2 is not null or col2 is null) and
. . .;
使用上記のクエリ使用したユーザーは、テーブルタイプを定義し
タイプテーブルを作成します - 手順 - ユーザー定義テーブルタイプ
@UserDefineTypeTable UserDefineTypeTable読み取り専用
はTABLE1に挿入 COL1、 COL2、COL3
(タイプとして@UserDefineTypeTableから
type.col1、 type.col2、 タイプ、COL3
を選択)
SQLサーバのバージョン使っていますか? – SqlZim
また、サンプルデータをDDL + DMLおよび望ましい結果として含めるように質問を編集してください。 –
そのSQL Server 2012 v11 –