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

2つのSQLクエリからこれらの異なる結果が得られるのはなぜですか?

    残念ながら、これはSQLServerでの文字列連結の信頼性の低い方法です。最も些細な場合を除いて、私はそれを避けます。このKBには、さらにいくつかの情報があります。実行プランと集計連結クエリの結果は式の場所

    そうは言っても、私はあなたの問題を再現し、私の環境で回避策を提供することができました:

    SET @val = ''
    SELECT @val = @val + 'Hello, my name is ' + replace([name], '', '') + '!' + CHAR(10) + CHAR(13)
    FROM LINKED.A.sys.tables
    

    式に空の置換関数を追加したことに注意してください。出力には何もしませんが、ローカルを追加します。 クエリプランへの「スカラーの計算」ステップ。これは、リモートクエリに必要と思われるものを返すだけでなく、名前列からすべてのデータをプルバックしてローカルで処理するようです。

    交換 空の引数で。おそらく二重のreverse か何か。ドキュメントに記載されているように、必要に応じて必ず最大データ型にキャストしてください。

    更新

    @varを宣言するだけです varchar(max)として nvarchar(max)ではなく 置換関数と同じように、名前列全体(sysname-またはnvarchar(128)-と私は信じています)をローカル処理に戻すため、問題が解決します。 リンクされたサーバー設定 のどの組み合わせかわからないふりをすることができません。 暗黙のキャストにより、これが発生します。うまくいけば、この分野の知識が豊富な人がチャイムインできます!




    1. SQL Server:oracle keepdensity_rankクエリを模倣する方法は?

    2. SQL Server(T-SQL)からHTMLメールを送信する方法

    3. DjangoデータベースのバックエンドをMySqlからPostgreSQLに変更する

    4. SQLServerの宛先とOLEDBの宛先