前もってデータ型の情報がないテーブルに対して T-SQL SELECT ステートメントを生成しています。これらのステートメントでは、テーブルの列の元の値の長さに応じて文字列操作操作を実行する必要があります。
1 つの例 (ただし、唯一の例ではありません) は、文字列の特定の位置にテキストを挿入することです。これには、末尾に挿入するオプションが含まれます。
SELECT
CASE WHEN (LEN ([t0].[Product] = 8)
THEN [t0].[Product] + 'test'
ELSE STUFF ([t0].[Product], 8, 0, 'test')
END
FROM [OrderItem] [t0]
(STUFF では文字列の末尾にテキストを挿入できないため、CASE WHEN + LEN が必要です。)
問題は、LEN が末尾の空白を除外するため、計算が台無しになることです。末尾の空白を除外しない DATALENGTH を使用できることはわかっていますが、Product 列の型が varchar 型か nvarchar 型かがわからないため、DATALENGTH によって返されるバイトを STUFF で必要な文字に変換することはできません。
では、使用されている文字列データ型に関する事前情報なしで、文字列の正確な文字数に依存する SQL ステートメントを生成するにはどうすればよいでしょうか?