Skip to content

Commit 47aa9ee

Browse files
committed
fix for varchar(max)
1 parent 99ba967 commit 47aa9ee

File tree

1 file changed

+75
-61
lines changed

1 file changed

+75
-61
lines changed

sp_doc.sql

Lines changed: 75 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -210,27 +210,31 @@ BEGIN
210210
,CASE
211211
WHEN TYPE_NAME([user_type_id]) IN (N''decimal'',N''numeric'')
212212
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
213-
WHEN TYPE_NAME([user_type_id]) IN (''varchar'', ''char'')
214-
THEN QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
213+
WHEN TYPE_NAME([user_type_id]) IN (''varchar'', ''char'', ''varbinary'')
214+
THEN CASE
215+
WHEN [max_length] = -1
216+
THEN N''(MAX)''
217+
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
218+
END
215219
WHEN TYPE_NAME([user_type_id]) IN (N''time'',N''datetime2'',N''datetimeoffset'')
216220
THEN QUOTENAME(CAST(scale AS varchar(5)), ''('')
217221
WHEN TYPE_NAME([user_type_id]) in (N''float'')
218222
THEN CASE
219-
WHEN [c].precision = 53
220-
THEN N''''
221-
ELSE CONCAT(N''('',CAST([c].precision AS varchar(5)),N'')'')
222-
END
223+
WHEN [c].precision = 53
224+
THEN N''''
225+
ELSE CONCAT(N''('',CAST([c].precision AS varchar(5)),N'')'')
226+
END
223227
WHEN TYPE_NAME([c].user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
224228
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
225229
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
226230
THEN N''''
227-
ELSE CASE
228-
WHEN [max_length] = -1
229-
THEN N''(MAX)''
230-
WHEN TYPE_NAME([user_type_id]) IN (N''nvarchar'',N''nchar'')
231-
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
232-
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
231+
WHEN TYPE_NAME([user_type_id]) IN (N''nvarchar'',N''nchar'')
232+
THEN CASE
233+
WHEN [max_length] = -1
234+
THEN N''(MAX)''
235+
ELSE QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
233236
END
237+
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
234238
END)
235239
,'' | ''
236240
,CASE [c].[is_nullable]
@@ -413,29 +417,33 @@ BEGIN
413417
,'' | ''
414418
,CONCAT(UPPER(TYPE_NAME([user_type_id]))
415419
,CASE
416-
WHEN TYPE_NAME([user_type_id]) IN (N''decimal'',N''numeric'')
417-
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
418-
WHEN TYPE_NAME([user_type_id]) IN (''varchar'', ''char'')
419-
THEN QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
420-
WHEN TYPE_NAME([user_type_id]) IN (N''time'',N''datetime2'',N''datetimeoffset'')
421-
THEN QUOTENAME(CAST(scale AS varchar(5)), ''('')
422-
WHEN TYPE_NAME([user_type_id]) in (N''float'')
423-
THEN CASE
420+
WHEN TYPE_NAME([user_type_id]) IN (N''decimal'',N''numeric'')
421+
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
422+
WHEN TYPE_NAME([user_type_id]) IN (''varchar'', ''char'', ''varbinary'')
423+
THEN CASE
424+
WHEN [max_length] = -1
425+
THEN N''(MAX)''
426+
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
427+
END
428+
WHEN TYPE_NAME([user_type_id]) IN (N''time'',N''datetime2'',N''datetimeoffset'')
429+
THEN QUOTENAME(CAST(scale AS varchar(5)), ''('')
430+
WHEN TYPE_NAME([user_type_id]) in (N''float'')
431+
THEN CASE
424432
WHEN [c].precision = 53
425433
THEN N''''
426434
ELSE CONCAT(N''('',CAST([c].precision AS varchar(5)),N'')'')
427435
END
428-
WHEN TYPE_NAME([c].user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
429-
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
430-
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
431-
THEN N''''
432-
ELSE CASE
436+
WHEN TYPE_NAME([c].user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
437+
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
438+
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
439+
THEN N''''
440+
WHEN TYPE_NAME([user_type_id]) IN (N''nvarchar'',N''nchar'')
441+
THEN CASE
433442
WHEN [max_length] = -1
434-
THEN N''(MAX)''
435-
WHEN TYPE_NAME([user_type_id]) IN (N''nvarchar'',N''nchar'')
436-
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
437-
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
438-
END
443+
THEN N''(MAX)''
444+
ELSE QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
445+
END
446+
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
439447
END)
440448
,'' | ''
441449
,CASE [c].[is_nullable]
@@ -539,28 +547,31 @@ BEGIN
539547
,CASE
540548
WHEN TYPE_NAME([user_type_id]) IN (N''decimal'',N''numeric'')
541549
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
542-
WHEN TYPE_NAME([user_type_id]) IN (''varchar'', ''char'')
543-
THEN QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
550+
WHEN TYPE_NAME([user_type_id]) IN (''varchar'', ''char'', ''varbinary'')
551+
THEN CASE
552+
WHEN [max_length] = -1
553+
THEN N''(MAX)''
554+
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
555+
END
544556
WHEN TYPE_NAME([user_type_id]) IN (N''time'',N''datetime2'',N''datetimeoffset'')
545557
THEN QUOTENAME(CAST(scale AS varchar(5)), ''('')
546558
WHEN TYPE_NAME([user_type_id]) in (N''float'')
547559
THEN CASE
548-
WHEN precision = 53
549-
THEN N''''
550-
ELSE QUOTENAME(CAST(precision AS varchar(5)),''('') END
551-
WHEN TYPE_NAME([user_type_id]) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
560+
WHEN [param].precision = 53
561+
THEN N''''
562+
ELSE CONCAT(N''('',CAST([param].precision AS varchar(5)),N'')'')
563+
END
564+
WHEN TYPE_NAME([param].user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
552565
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
553-
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
566+
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'') OR [is_readonly] = 1
554567
THEN N''''
555-
ELSE CASE
556-
WHEN [is_readonly] = 1 --User defined table type
557-
THEN N''''
558-
WHEN [max_length] = -1
559-
THEN N''(MAX)''
560-
WHEN TYPE_NAME([user_type_id]) IN (N''nvarchar'',N''nchar'')
561-
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
562-
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
568+
WHEN TYPE_NAME([user_type_id]) IN (N''nvarchar'',N''nchar'')
569+
THEN CASE
570+
WHEN [max_length] = -1
571+
THEN N''(MAX)''
572+
ELSE QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
563573
END
574+
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
564575
END)
565576
,'' | ''
566577
,CASE [is_output]
@@ -662,31 +673,34 @@ BEGIN
662673
select CONCAT(''| '', CASE WHEN LEN([param].[name]) = 0 THEN ''*Output*'' ELSE [param].[name] END
663674
,'' | ''
664675
,CONCAT(UPPER(TYPE_NAME([user_type_id]))
665-
,CASE
676+
,CASE
666677
WHEN TYPE_NAME([user_type_id]) IN (N''decimal'',N''numeric'')
667678
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
668-
WHEN TYPE_NAME([user_type_id]) IN (''varchar'', ''char'')
669-
THEN QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
679+
WHEN TYPE_NAME([user_type_id]) IN (''varchar'', ''char'', ''varbinary'')
680+
THEN CASE
681+
WHEN [max_length] = -1
682+
THEN N''(MAX)''
683+
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
684+
END
670685
WHEN TYPE_NAME([user_type_id]) IN (N''time'',N''datetime2'',N''datetimeoffset'')
671686
THEN QUOTENAME(CAST(scale AS varchar(5)), ''('')
672687
WHEN TYPE_NAME([user_type_id]) in (N''float'')
673688
THEN CASE
674-
WHEN precision = 53
675-
THEN N''''
676-
ELSE QUOTENAME(CAST(precision AS varchar(5)),''('') END
677-
WHEN TYPE_NAME([user_type_id]) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
689+
WHEN [param].precision = 53
690+
THEN N''''
691+
ELSE CONCAT(N''('',CAST([param].precision AS varchar(5)),N'')'')
692+
END
693+
WHEN TYPE_NAME([param].user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
678694
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
679-
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
695+
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'') OR [is_readonly] = 1
680696
THEN N''''
681-
ELSE CASE
682-
WHEN [is_readonly] = 1 --User defined table type
683-
THEN N''''
684-
WHEN [max_length] = -1
685-
THEN N''(MAX)''
686-
WHEN TYPE_NAME([user_type_id]) IN (N''nvarchar'',N''nchar'')
687-
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
688-
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
697+
WHEN TYPE_NAME([user_type_id]) IN (N''nvarchar'',N''nchar'')
698+
THEN CASE
699+
WHEN [max_length] = -1
700+
THEN N''(MAX)''
701+
ELSE QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
689702
END
703+
ELSE QUOTENAME(CAST([max_length] AS VARCHAR(10)), ''('')
690704
END)
691705
,'' | ''
692706
,CASE [is_output]

0 commit comments

Comments
 (0)