Привести столбец к динамическому размеру на основе аргумента функции - PullRequest
3 голосов
/ 03 марта 2011

Я пытаюсь привести что-то к 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.

1 Ответ

5 голосов
/ 03 марта 2011

Даже если вам удастся заставить это работать в функции, ваша инструкция 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...