2017-03-21 31 views
0

私はカーソルを使用せずに実装する必要がある設計上の懸念があります。T-SQLのカーソルに最適な代替品は何ですか?

varcharデータ型のすべての列を持つソーステーブル 'A'があります。私はそれらを反復し、各列を宛先テーブルのデータ型に変換し、変換/解析が失敗した場合、その行を余分なエラーテーブルに記録する必要があります。

今後のアドバイスは参考になります。

+0

SQLサーバのバージョン使っていますか? – SqlZim

+0

また、サンプルデータをDDL + DMLおよび望ましい結果として含めるように質問を編集してください。 –

+0

そのSQL Server 2012 v11 –

答えて

1

を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 
      . . .; 
0

使用上記のクエリ使用したユーザーは、テーブルタイプを定義し

タイプテーブルを作成します - 手順 - ユーザー定義テーブルタイプ

@UserDefineTypeTable UserDefineTypeTable読み取り専用

はTABLE1に挿入 COL1、 COL2、COL3

(タイプとして@UserDefineTypeTableから

type.col1、 type.col2、 タイプ、COL3

を選択)

関連する問題