sql >> データベース >  >> RDS >> Sqlserver

SQL Server:XML を使用したインライン条件変換?

    ISNUMERIC<のバージョンが必要なようです。 /a> XML データの関数。

    残念ながら、そのような組み込み関数は存在しません。そのため、いくつかのオプションがある独自の代替手段を考案する必要があります:

    これがパフォーマンスが重要ではない 1 回限りのまたは小規模なプロセスである場合は、TRY...CATCH を使用して、カーソル内で一度に 1 行ずつ入力テーブルを処理できます。 無効なキャストを処理するブロック (未テスト):

    DECLARE xmlCur CURSOR FOR
    SELECT textcol 
    FROM inputTable
    
    OPEN xmlCur
    DECLARE @string nvarchar(MAX)
    DECLARE @xml xml
    
    FETCH NEXT FROM xmlCur into @string
    
    WHILE @@fetch_status = 0
    BEGIN
        BEGIN TRY
            SET @xml = CAST(@string AS XML)
            -- Do something with XML
        END TRY
        BEGIN CATCH
            -- log failure/mark source row as invalid
        END CATCH
    
        FETCH NEXT FROM xmlCur into @string
    END
    
    CLOSE xmlCur
    DEALLOCATE xmlCur 
    

    または、.Net プログラミングに慣れている (そしてサーバーで有効になっている) 場合は、CLR 独自の IsXML 関数を作成します。 .Net コードは、このスレッド の 3 番目の投稿よりもそれほど複雑にする必要はありません。> .

    CLR ソリューションのパフォーマンスは、カーソルよりも優れているとは限りません。これを確認するにはテストが必要です。

    (うまくいかない明らかなことは、TRY...CATCH 内でフィールドを XML にキャストしようとするスカラー値の T-SQL 関数です。 ブロック。ただし、 TRY...CATCH 関数内では許可されていません。)




    1. SSLを使用したJDBCを介したGoogleCloudPostgreSQLへの接続

    2. PHP Oracle接続:oci_connect():ORA-24315:不正な属性タイプエラー

    3. CASデータベース認証が機能していません

    4. パスワードを SQL にハッシュする