1

型 (nvarchar や int など) が固定長であるか、システム テーブルをクエリして固定長でない場合、t-sql を使用してランタイムを調べることは可能ですか?

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

私の現在の賭けは、sys.all_columns.max_length = sys.types.max_lengthそれが固定長であると仮定するかどうかを確認できることmax_lengthです(少なくともnvarcharの場合、特別なコード(-1)があるようです)。

4

2 に答える 2

1

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

于 2009-03-24T10:12:23.623 に答える
0

はい、可能です。これを行う方法については、組み込みのストアド プロシージャ sp_columns のコードを参照してください。

于 2009-03-24T10:15:37.280 に答える