this_string IS all Over_the_MAP = ThisStringIsAllOverTheMap
/*
Pascal cases and concatenates a string. Underscores and spaces are
treated as boundaries and are removed after casing.
If a string is all upper or lower it will be proper cased.
Otherwise just capitalize first character.
*/
DECLARE @current_object_name NVARCHAR(128),
@generated_class_name NVARCHAR(128)
SET @current_object_name = 'this_string IS all Over_the_MAP'
-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CREATE TABLE #fn_pascal_case_parts ([name] NVARCHAR(256))
DECLARE @fn_pascal_case_input NVARCHAR(256),
@fn_pascal_case_output NVARCHAR(256),
@fn_pascal_case_part NVARCHAR(128),
@fn_pascal_case_sql VARCHAR(MAX)
-- --> PascalCase Function - set input
SET @fn_pascal_case_input = @current_object_name
-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
BEGIN --> PascalCase Function common code
-- copy/paste this block as-is and just set/get input/output
-- if modifcations are made - other instances of this code block should be replaced.
-- is ugly but the closest we can get to re-usable code in a batch statement
IF CHARINDEX(' ',@fn_pascal_case_input,0)>0 OR CHARINDEX('_',@fn_pascal_case_input,0)> 0
-- TSQL TIP: CS string comparisons on CI server
OR (SELECT @fn_pascal_case_input COLLATE Latin1_General_CS_AS) = UPPER(@fn_pascal_case_input)
OR (SELECT @fn_pascal_case_input COLLATE Latin1_General_CS_AS) = LOWER(@fn_pascal_case_input)
BEGIN
SET @fn_pascal_case_output = ''
SET @fn_pascal_case_input = REPLACE(@fn_pascal_case_input, ' ', '_') ;
DELETE FROM #fn_pascal_case_parts
SELECT @fn_pascal_case_sql = 'insert into #fn_pascal_case_parts select '
+ ''''
+ REPLACE(@fn_pascal_case_input, '_', ''' union all select ''')
+ ''''
EXEC ( @fn_pascal_case_sql )
DECLARE cPascalCase CURSOR READ_ONLY
FOR SELECT UPPER(SUBSTRING([name], 1, 1))
+ LOWER(SUBSTRING([name], 2, LEN([name]) - 1))
FROM #fn_pascal_case_parts
OPEN cPascalCase
FETCH NEXT FROM cPascalCase INTO @fn_pascal_case_part
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fn_pascal_case_output = @fn_pascal_case_output + @fn_pascal_case_part
FETCH NEXT FROM cPascalCase INTO @fn_pascal_case_part
END
CLOSE cPascalCase
DEALLOCATE cPascalCase
END
ELSE
SET @fn_pascal_case_output = UPPER(SUBSTRING(@fn_pascal_case_input, 1, 1)) + SUBSTRING(@fn_pascal_case_input, 2, LEN(@fn_pascal_case_input) - 1)
DROP TABLE #fn_pascal_case_parts
END --> PascalCase Function - copy/paste this block as-is and just set/get input/output
-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-- <-- PascalCase Function - get output
SET @generated_class_name = @fn_pascal_case_output
-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
PRINT @current_object_name + ' = ' + @generated_class_name
Technorati tags: SQL