1

古いMSSQL6.5からデータベースをプルするスクリプトを作成しようとしています。ユーザータイプの取得に遭遇しました。

私は次のカスタムタイプを持っています:

ここに画像の説明を入力してください

簡単なスクリプトを作成しました。同じテーブルからベース名を検索しました。

select t1.name as name, t2.name as base_name, t1.length as length 
from systypes t1, systypes t2 
where t1.usertype > 100 and t2.usertype <= 100 and t1.type = t2.type

次の結果が返されます。

name                           base_name                      length 
------------------------------ ------------------------------ ------ 
bitZ                           bit                            1      
tinyintZ                       tinyint                        1      
smallintZ                      smallint                       2      
intZ                           int                            4      
smalldatetimeZ                 smalldatetime                  4      
charZ_254                      sysname                        254    
charZ_254                      varchar                        254    
charZ_80                       sysname                        80     
charZ_80                       varchar                        80     
charZ_50                       sysname                        50     
charZ_50                       varchar                        50     
charZ_40                       sysname                        40     
charZ_40                       varchar                        40     
charZ_35                       sysname                        35     
charZ_35                       varchar                        35     
charZ_30                       sysname                        30     
charZ_30                       varchar                        30     
charZ_20                       sysname                        20     
charZ_20                       varchar                        20     
charZ_16                       sysname                        16     
charZ_16                       varchar                        16     
charZ_14                       sysname                        14     
charZ_14                       varchar                        14     
charZ_12                       sysname                        12     
charZ_12                       varchar                        12     
charZ_10                       sysname                        10     
charZ_10                       varchar                        10     
charZ_8                        sysname                        8      
charZ_8                        varchar                        8      
charZ_5                        sysname                        5      
charZ_5                        varchar                        5      
charZ_4                        sysname                        4      
charZ_4                        varchar                        4      
charZ_1                        sysname                        1      
charZ_1                        varchar                        1      
charZ_120                      sysname                        120    
charZ_120                      varchar                        120    
binZ_10                        binary                         10     
binZ_10                        timestamp                      10     

ここに2つの問題があります:

  1. varcharは、基本タイプが同じであるため、sysnameとvarcharの2つのタイプに解決されました。binZ_10でも同じ問題
  2. 非varcharがゼロ以外の長さとして返されました

適切なMS出力を取得するためにどのスクリプトを使用できますか?

これが元のテーブルの断片です。

タイプを選択し、systypesから名前をタイプ順に並べ替えます

type name                           
---- ------------------------------ 
. . .                  
39   charZ_80                       
39   sysname                        
39   varchar                        
45   binary                         
45   binZ_10                        
45   timestamp                      
47   char     
. . .    
4

1 に答える 1

0

トレースを使用しました。結果は sp_MShelptype によって返されます。

フィールドのサブセットが必要なので、結果を一時テーブルにプッシュしました。

create table #Result
(
    UserDatatypeName varchar(92), owner varchar(20), basetypename varchar(92), defaultname varchar(61), rulename varchar(61) null, tid int, length int, nullable int, dt_prec int null, dt_scale int null, dt_flags int, allowidentity int
)

insert #Result exec sp_MShelptype null, 'uddt'

select UserDatatypeName name, basetypename base_type, length, defaultname default from #Result

drop table #Result
于 2012-12-08T21:29:07.093 に答える