2009-03-24 11 views
1

タイプ(たとえばnvarcharまたはint)が固定長であるかどうか、システムテーブルを照会してt-sqlを使用してランタイムを調べることはできますか?t-sqlの型が固定長であるかどうかを調べる方法(実行時)?

私はこれを行う必要がある理由は、SQLコードランタイムを生成する必要があり、いくつかの列(設計時には不明)の種類に応じていくつかの宣言(DECLARE @foo SOMETYPE(LENGTH)またはDECLARE @foo SOMETYPE)を生成する必要があるということです。

私の現在の賭けは、sys.all_columns.max_length = sys.types.max_lengthであるかどうかを確認でき、固定長であると仮定しています(max_lengthは少なくともnvarcharでは特別なコード(-1)を持っているようです)。

+0

互換性が必要なSQL Serverのバージョンは何ですか?一部のソリューション(information_schema.columnsなど)はSQL 2005以降のバージョンでのみ機能します。 –

+0

SQL 2005またはそれ以降。 文字型、小数点型、整数型などの両方を理解できる宣言を生成するための一般的なアルゴリズムを見つけることができないようです。単にinformation_schema.columns.numeric_precision/numeric_scale/character_maximum_lengthを確認していないようです十分であるように。 – finnsson

答えて

1

information_schema.columnsを見ることができます。文字型の列が最大長を持つ場合、それはcharacter_maximum_lengthで指定され、数値フィールドの精度はnumeric_precisionで定義されます。私の知る限りでは、int型は常に4バイトです。また、var型は固定長ではなく、最大長まで格納します.nvarchar(10)に2 2文字しか格納しません。固定長の文字列を検出するには、char型またはnchar型を探します。

+0

@cmsjr:intの格納サイズは4バイトです(bigintは8バイトです) –

0

はい、可能です。内蔵のストアドプロシージャsp_columnsのコードを見て、これを行う方法を見てください。

関連する問題