我正在尝试将某些内容转换为char(n),其中n是函数参数
ALTER FUNCTION FixMe(@colName varchar, @width integer) RETURNS varchar
AS BEGIN
RETURN CAST(@colName as char(@width))
END
此代码的错误为
Incorrect syntax near '@width'.
我也试过用EXEC()
通过:
EXEC('set @retval = CAST(@colName as char(' + @width + '))')
但我接着去了
Invalid use of side-effecting or time-dependent operator in 'EXECUTE STRING' within a function.
答案 0 :(得分:5)
即使你确实设法让它在一个函数中工作,你的RETURNS varchar
语句也会导致结果在出路时隐式转换为varchar(1)
。
我认为这与您之前的问题有关,在这种情况下,这可能会对您有所帮助。
ALTER FUNCTION FixMe(@colvalue VARCHAR(8000),
@width INTEGER)
RETURNS VARCHAR(8000)
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN REPLACE(RTRIM(@colvalue), ' ', ' ') +
CASE
WHEN @width > LEN(@colvalue)
THEN REPLICATE(' ', @width - LEN(@colvalue))
ELSE ''
END
END