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) "It's a dog-eat-dog world, and I'm wearing Milk-Bone underwear." "Norm", on "Cheers". Also from "Cheers", from "Carla": "You need to know 3 things about Tortelli men: Tortelli men draw women like flies; Tortelli men treat women like flies; Tortelli men's brains are in their flies".