在用户定义的函数中返回列名而不是值SQL

时间:2013-02-28 08:43:56

标签: sql sql-server-2008-r2 user-defined-functions

我有一个表,其中有超过40列都存储在varchar中。有些列包含数字或日期数据。

我有一个用户定义的函数,它将列名和数据类型作为参数,并尝试验证列中的数据。

如果验证失败,则应返回消息“ColumnName不是数字或缺失”。但是它返回'值不是数字或缺少'。

功能代码是:

create function [dbo].[fn_Polaris_Validate_Staging_Data](@ColumnName varchar(max), @TargetValidation varchar(max))
returns varchar(max)
AS
Begin
Declare @Remark varchar(max);
    if(@TargetValidation = 'Standard' and @ColumnName is null)
    BEGIN
        select @Remark = @ColumnName + ' is not provided.'
        return @Remark
    END
    if(@TargetValidation = 'NumericType' and ISNUMERIC(@ColumnName) = 0)
    BEGIN
        select @Remark = @ColumnName + ' is not numeric or not provided.'
        return @Remark
    END
    if(@TargetValidation = 'DateType' and ISDATE(@ColumnName) = 0)
    BEGIN
        select @Remark = @ColumnName + ' is not proper date or not provided.'
        return @Remark
    END
    return isnull(@Remark, '')
END

我的表中有一个名为'remarks'的列,用于保存此注释。这是我在更新查询中使用此功能的方式:

UPDATE TABLE TABLE1
SET remarks = isnull(remarks,'') +
              function(Interest, 'NumericType') +
              function(Asset, 'Standard') +
              function(Date, 'DateType')

非常感谢任何帮助。 谢谢。

1 个答案:

答案 0 :(得分:0)

使用ISNUMERIC(@variable)只能处理@variable的字符串内容,它不会引用字符串中的任何列名。

declare @col as varchar(max)
set @col = '1'
select ISNUMERIC(@col)
= 1

declare @col as varchar(max)
set @col = 'table.id'
select ISNUMERIC(@col)
= 0 - regardless of the type of table.id

也许这会有用吗?

SELECT DATA_TYPE FROM information_schema.columns 
WHERE Table_Name='mytable' and Column_Name='mycolname'