In order to accept and return differing data types, you'd have to use sql_variant, which will affect how easily you can use the value returned by the function:
CREATE FUNCTION [dbo].[fnchkNull] (
@colname sql_variant
)
RETURNS sql_variant
AS
BEGIN
RETURN (
SELECT CASE
WHEN CAST(SQL_VARIANT_PROPERTY ( @colname , 'BaseType' ) AS varchar(30)) LIKE '%int%'
THEN ISNULL(@colname, 0)
WHEN @colname IS NULL OR @colname = '' OR @colname = 'NULL'
THEN 'No Data'
ELSE @colname
END
)
END
SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.