| ■No91636 (韋駄天 さん) に返信
> 表示してみると 90 でした。
下記の構文で変更することもできます。
DB 管理者の方と相談する必要はあるでしょうけれども。
ALTER DATABASE [SV-TEST]
SET COMPATIBILITY_LEVEL = 120;
> この互換性レベルはサーバーのレベルでしょうか?
> データベースごとに設定されているのでしょうか?
サーバー単位でもクライアント単位でもなく、データベース単位です。
たとえば同じサーバー内に、互換性レベル 100 と 90 と 80 のデータベースが同居することもあります。
> これで以下のように2列をそれぞれ分割することは可能ですか?
> A 1 4
> A 2 4
> B 3 5
> B 3 6
互換性レベルが 90 なのであれば、
先の自作関数を通じて、こんな感じですね。
/*
CREATE TABLE TBL ( COL1 nchar(1) PRIMARY KEY, COL2 nvarchar(10), COL3 nvarchar(10) );
INSERT INTO TBL (COL1, COL2, COL3) VALUES (N'A', N'1,2', N'4'), (N'B', N'3', N'5,6');
*/
SELECT
TBL.COL1 AS Field1
, X.Value AS Field2
, Y.Value AS Field3
FROM TBL
CROSS APPLY [dbo].[ufnStringSplit](COL2) X
CROSS APPLY [dbo].[ufnStringSplit](COL3) Y
注意点:
・COL2 の値が 5 つ、COL3 の値が 3 つの場合、CROSS 結果は 15 レコード分に展開されます。
・COL2 および COL3 が空文字列の場合は、単一値が設定されていた場合と同様に展開されます。
・COL2 や COL3 が NULL の場合、その行は抽出結果に現れなくなります。 |