T-SQLでの型が固定長であるかどうか(ランタイム)を確認する方法?
-
21-08-2019 - |
質問
は、それがタイプ(例えばnvarchar型またはINT)は、いくつかのシステム・テーブルを照会することによって、固定長であるかどうT-SQLを使用して、ランタイムを見つけることは可能ですか?
私はこれを行う必要がある理由は、私は、SQLコードの実行時間を生成し、(デザイン時に不明である)一部の列の種類に応じて、いくつかの宣言(DECLARE @foo SOMETYPE(LENGTH)
またはDECLARE @foo SOMETYPE
)を生成する必要がありますする必要があるということです。
私の現在の賭けは、(sys.all_columns.max_length = sys.types.max_length
は、少なくともnvarchar型のために、特別なコードを(-1)があるようですので)max_length
もしそうなら、それは固定長であると仮定した場合、私は確認することができるということです。
解決
あなたはinformation_schema.columnsで見ることができます。文字入力されたカラムは、それがCHARACTER_MAXIMUM_LENGTHで指定される最大長さを持っている場合は、数値フィールドは、その精度がNUMERIC_PRECISIONで定義されています。カップルのノート、私の知る限りにint型は、また、常に4バイトですNVARCHAR(10)が2を保持している場合のvar種類のいずれかが、定義によって長さが固定されていない、とだけ彼らの最大の長さまで保存されています文字列、それだけで店舗2つの文字。だから、固定長文字列を検出するには、charまたはnchar型のタイプを探していることになります。
他のヒント
はい、それは可能です。これを行う方法を確認するために、組み込みのストアドプロシージャのsp_columnsは用のコードを見てます。