古い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つの問題があります:
- varcharは、基本タイプが同じであるため、sysnameとvarcharの2つのタイプに解決されました。binZ_10でも同じ問題
- 非varcharがゼロ以外の長さとして返されました
適切なMS出力を取得するためにどのスクリプトを使用できますか?
これが元のテーブルの断片です。
タイプを選択し、systypesから名前をタイプ順に並べ替えます
type name
---- ------------------------------
. . .
39 charZ_80
39 sysname
39 varchar
45 binary
45 binZ_10
45 timestamp
47 char
. . .