私はphp + mssqlを使用する比較的単純なウェブサイトを持っています。私は単純な挿入と削除の作業を行う様々なストアドプロシージャを持っています。私が直面している問題は、ストアドプロシージャに渡すパラメータの多くは、データを挿入する列と同じ長さです。SQL Serverのストアドプロシージャは、パラメータとしてvarchar maxを使用します。
たとえば、ユーザーを登録するストアドプロシージャがあります。ストアドプロシージャには、型としてvarchar(12)
のパラメータを持つ@USERNAME
があります。 USER
テーブルの列番号USERNAME
は、その長さで同じタイプです。原則としてこれは実際問題ではありません。しかし、私はむしろストアドプロシージャのパラメータの長さを変更することなく、USERNAME
の列の長さを自由に変更することができます。
mssql phpドライバがテーブルのパラメータをサポートしていないため、このパラメータは使用できません。
私が想像できる唯一の解決策は、ストアドプロシージャのパラメータにvarchar(max)を使用することですが、これは悪い習慣と考えられますか?
私の意見では、ストアドプロシージャのパラメータは、基になる列の型を反映する必要があります。これにより、実行時の切り捨てエラーが回避され、自己文書化ストアド・プロシージャ・インタフェースが提供されます。 –
IMHOでは、フィールドの長さを制限しないでください。ディスク容量は安く、SQL Serverは高速であり、最も重要なことです。変更点 –
バージョン管理用にパラメータSQLリソースIMOを使用するか、データベースの各フィールドにUDTを作成するかのどちらかです。テーブルとストアドprocsの両方に影響を与える定義を変更する必要があります – Mark