0

次のような属性を持つ2つのテーブルがありますdate(datetime),headline(varchar),text(text)

ここで、これら 2 つのテーブルをすべて UNION し、日時で並べ替えたいと思います。これを行うと、エラーが発生します:

作業テーブルではテキスト ポインターのみが許可され、text、ntext、または image 列は許可されません。クエリ プロセッサは、作業テーブルに text、ntext、または image 列を必要とするクエリ プランを生成しました。

行ったり来たりした後、エラーの原因はテキスト属性であることがわかりました。しかし、何をすべきか?VARCHAR にキャストしようとしましたが、成功しませんでした。どちらのテーブルも、テキスト属性でテキスト形式を使用しています。

また、ORDER BY を削除すると、すべて正常に動作します。何をすべきか?

元の SQL クエリを以下に示しますが、上記の単純化したものに返信するだけでかまいません。

SELECT     id, datetime, author, headline, intro, text, type, toppriority,
           secondpriority, comments, companyid, '1' source 
FROM     Table1
UNION ALL
SELECT     AutoID AS id, Dato AS datetime,
           ID COLLATE SQL_Latin1_General_CP1_CI_AS AS author, NULL AS headline, 
           NULL AS intro, Notat COLLATE SQL_Latin1_General_CP1_CI_AS AS text,
           CAST(NotatTypeID AS VARCHAR) AS type,
           NULL AS toppriority, NULL AS secondpriority, NULL AS comments,
           Selskabsnummer AS companyid, '2' source 
FROM     Table2
WHERE     (NotatTypeID = '5') OR (NotatTypeID = '6')
ORDER BY datetime DESC

前もって感謝します

4

2 に答える 2

0

これを回避する 1 つの方法は、ユニオンを sup クエリとして実行し、後で結果を並べ替えることです。

SELECT * FROM 
(
    SELECT     id, datetime, author, headline, intro, text, TYPE, toppriority,
            secondpriority, comments, companyid, '1' source 
    FROM     Table1
    UNION ALL
    SELECT     AutoID AS id, Dato AS datetime,
            ID COLLATE SQL_Latin1_General_CP1_CI_AS AS author, NULL AS headline, 
            NULL AS intro, Notat COLLATE SQL_Latin1_General_CP1_CI_AS AS text,
            CAST(NotatTypeID AS VARCHAR) AS TYPE,
            NULL AS toppriority, NULL AS secondpriority, NULL AS comments,
            Selskabsnummer AS companyid, '2' source 
    FROM     Table2
    WHERE     (NotatTypeID = '5') OR (NotatTypeID = '6')
) a
ORDER BY datetime DESC
于 2010-10-05T12:52:57.207 に答える
0

日時フィールドをインデックス内のテキスト フィールドにキャストするのはどうでしょうか。フィールド/エイリアス名として 'datetime' と 'text' を使用すると、非常に紛らわしく、潜在的な問題の原因となる可能性があることに注意してください。

于 2010-10-05T13:00:47.890 に答える