0

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

この発言を保存するテーブルに「発言」という列があります。これは、更新クエリでこの関数を使用する方法です。

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

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

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'
于 2013-02-28T12:54:20.463 に答える