3

列を列挙せずに SQL クエリを記述できるようにしたいと考えています。これにより、すべての列と、varchar(max) に変換された ntext 列が返されます。これを行う賢い方法があるかどうか疑問に思っていました。

そのようなクエリで UNION、EXCEPT などの比較ベースの演算子を実行できるので、これは素晴らしいことです。netxt 列は比較できないため、これらの演算子を使用すると失敗します。

私の現在の考え:

クエリを動的 SQL として構築する関数を作成します。これに似たもの: http://lotsacode.wordpress.com/2010/03/23/sql-server-ntext-cannot-be-selected-as-distinct/

より良い方法はありますか?

ご意見ありがとうございます。

4

3 に答える 3

5

NTEXTいずれにせよ、SQl-Server の将来のバージョンから ( Image および text と共に) 削除されるので、弾丸を噛んで列を に変更してみNVARCHAR(MAX)ませんか? 一度は費用がかかるかもしれませんが、おそらくそれだけの価値があります。

ALTER TABLE dbo.T ALTER COLUMN NTextColumn NVARCHAR(MAX) NULL; -- OR NOT NULL

これを使用して、データベース全体のスクリプトを生成して実行できます。

DECLARE @SQL NVARCHAR(MAX) = 
    (   SELECT  'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' + 
                                QUOTENAME(OBJECT_NAME(object_id)) + 
                                ' ALTER COLUMN ' + QUOTENAME(Name) + 
                                ' NVARCHAR(MAX) ' + 
                                CASE WHEN is_nullable = 0 THEN 'NOT' ELSE '' END + 
                                ' NULL;' + CHAR(13) + 'GO' + CHAR(13)
        FROM    sys.columns
        WHERE   system_type_id = 99 --NTEXT
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)');

EXECUTE sp_executesql @SQL;
于 2013-09-13T15:21:14.493 に答える