11IF OBJECT_ID (' dbo.udf_LCS' ) IS NULL
2- EXECUTE (' CREATE FUNCTION dbo.udf_LCS() RETURNS NVARCHAR(MAX ) AS RETURN SELECT 1 AS A;' );
2+ EXECUTE (' CREATE FUNCTION dbo.udf_LCS() RETURNS nvarchar(max ) AS RETURN SELECT 1 AS A;' );
33GO
44
55
@@ -25,22 +25,22 @@ example:
2525returns: >
2626 the longest common subsequence as a string
2727**/
28- (@xString VARCHAR ( MAX ), @yString VARCHAR ( MAX ))
29- RETURNS VARCHAR ( MAX )
28+ (@xString varchar ( max ), @yString varchar ( max ))
29+ RETURNS varchar ( max )
3030AS
3131 BEGIN
3232
33- DECLARE @ii INT = 1 ; -- inner index
34- DECLARE @jj INT = 1 ; -- next loop index
35- DECLARE @West INT ; -- array reference number to left
36- DECLARE @NorthWest INT ; -- array reference previous left
37- DECLARE @North INT ; -- array reference previous
38- DECLARE @Max INT ; -- holds the maximum of two values
39- DECLARE @Current INT ; -- current number of matches
40- DECLARE @Matrix NVARCHAR ( MAX );
41- DECLARE @PreviousRow NVARCHAR (2000 ); -- the previous matrix row
42- DECLARE @JSON NVARCHAR (4000 ); -- json work variable
43- DECLARE @Numbers TABLE (jj INT );
33+ DECLARE @ii int = 1 ; -- inner index
34+ DECLARE @jj int = 1 ; -- next loop index
35+ DECLARE @West int ; -- array reference number to left
36+ DECLARE @NorthWest int ; -- array reference previous left
37+ DECLARE @North int ; -- array reference previous
38+ DECLARE @Max int ; -- holds the maximum of two values
39+ DECLARE @Current int ; -- current number of matches
40+ DECLARE @Matrix nvarchar ( max );
41+ DECLARE @PreviousRow nvarchar (2000 ); -- the previous matrix row
42+ DECLARE @JSON nvarchar (4000 ); -- json work variable
43+ DECLARE @Numbers TABLE (jj int );
4444-- SQL Prompt formatting off
4545
4646INSERT INTO @Numbers(jj) -- this is designed for words of max 40 characters
@@ -59,16 +59,16 @@ VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),
5959 SELECT @West = 0 , @JSON = NULL ;
6060 -- now create a row in just one query
6161 SELECT @NorthWest =
62- Json_Value(@PreviousRow, ' $[' + Cast (jj - 1 AS VARCHAR (5 )) + ' ]' ),
62+ Json_Value(@PreviousRow, ' $[' + Cast (jj - 1 AS varchar (5 )) + ' ]' ),
6363 @North =
64- Json_Value(@PreviousRow, ' $[' + Cast (jj AS VARCHAR (5 )) + ' ]' ),
64+ Json_Value(@PreviousRow, ' $[' + Cast (jj AS varchar (5 )) + ' ]' ),
6565 @Max = CASE WHEN @West > @North THEN @West ELSE @North END ,
6666 @Current =
6767 CASE WHEN Substring (@xString, jj, 1 ) = Substring (@yString, @ii, 1 ) THEN
6868 @NorthWest + 1 ELSE @Max END ,
6969 @JSON =
7070 Coalesce (@JSON + ' ,' , ' [0,' )
71- + Coalesce (Cast (@Current AS VARCHAR (5 )), ' null' ), @West = @Current
71+ + Coalesce (Cast (@Current AS varchar (5 )), ' null' ), @West = @Current
7272 FROM @Numbers AS f
7373 WHERE f .jj <= Len (@xString);
7474 -- and store the result as the previous row
@@ -97,14 +97,14 @@ VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),
9797 SELECT @PreviousRowScore =
9898 Json_Value(
9999 @Matrix,
100- ' strict $[' + Convert (VARCHAR (5 ), @ii - 1 ) + ' ]['
101- + Convert (VARCHAR (5 ), @jj) + ' ]'
100+ ' strict $[' + Convert (varchar (5 ), @ii - 1 ) + ' ]['
101+ + Convert (varchar (5 ), @jj) + ' ]'
102102 ),
103103 @previousColScore =
104104 Json_Value(
105105 @Matrix,
106- ' strict $[' + Convert (VARCHAR (5 ), @ii) + ' ]['
107- + Convert (VARCHAR (5 ), @jj - 1 ) + ' ]'
106+ ' strict $[' + Convert (varchar (5 ), @ii) + ' ]['
107+ + Convert (varchar (5 ), @jj - 1 ) + ' ]'
108108 );
109109 -- either go north or west
110110 IF @PreviousRowScore < @previousColScore SELECT @jj = @jj - 1 ;
0 commit comments