SQL函数返回适当的长度字符串

时间:2015-08-03 14:24:23

标签: ssis sql-server-2008-r2

下面是一个函数,它将输入字符串填充到输入字符串指定一侧的所需长度。当由SSIS执行时,元数据不返回所需的长度。我需要它将适当的数据长度返回给SSIS。

CREATE FUNCTION [dbo].[udf_FillField] 
(
    @StringOrg nvarchar(max), --Original string
    @LengthOfStringOutPut int, --Length of output sting
    @FillChr nvarchar(1), --Char to pad the original string
    @LRJustified nvarchar(1) --Left or right justified
)
RETURNS nvarchar(max)
AS
BEGIN

    --  Declare Variable(s)
    DECLARE @Result nvarchar(max)

    --  Left Justified
    IF @LRJustified = 'L'
        BEGIN 
            SET @Result = 
                LEFT(ISNULL(@StringOrg, ''), @LengthOfStringOutPut) + 
                REPLICATE(@FillChr, (@LengthOfStringOutPut - LEN(LEFT(ISNULL(@StringOrg, ''), @LengthOfStringOutPut))))
        END 
    --  Right Justified
    IF @LRJustified = 'R'
        BEGIN
            SET @Result = 
                REPLICATE(@FillChr, (@LengthOfStringOutPut - LEN(LEFT(ISNULL(@StringOrg, ''), @LengthOfStringOutPut)))) + 
                LEFT(ISNULL(@StringOrg, ''), @LengthOfStringOutPut) 
        END
    --  Incorrect Parameter Input
    IF @LRJustified <> 'R' AND @LRJustified <> 'L'
        BEGIN
            SET @Result = 
                NULL
        END

    --  Output Data
    RETURN @Result
END

1 个答案:

答案 0 :(得分:1)

您的UDF定义为返回.element{ -webskit-transition: max-height 1s; max-height:0px; } .parentelement:hover childelement { max-height:50px; } 。 SSIS将查看函数的元数据,请参阅它指定它返回nvarchar(max)或DT_NTEXT,因为SSIS将对其进行分类,并且已完成验证。

您将能够使用您的函数的唯一方法是将结果显式地转换为适当的大小。

nvarchar(max)

作为旁注,UDF感觉像代码重用,这就是我们作为开发人员所教授的内容。但是在SQL Server中,它们是令人厌恶的,因为优化器无法为函数需要多少工作产生准确的成本,因此它猜测,100次中100次,这可能是错误的。您将获得所封装的任何业务逻辑的一致实现,但基于所需的数据量和逻辑,性能损失可能会很严重。