Sempre gosto de agregar pequenas funções que ajudam no cotidiano do desenvolvedor, neste caso é um função para transformar uma lista de parâmetros em uma tabela.

CREATE FUNCTION dbo.Split
  (
                          @Texto VARCHAR(MAX),
                          @Caractere VARCHAR(MAX) = ';'
  ) RETURNS @Saida TABLE (Array VARCHAR(8000)) 

BEGIN

  DECLARE @Pt VARCHAR(8000)
  WHILE CHARINDEX(@Caractere, @Texto, 0) <> 0
    BEGIN
      SELECT @Pt    = RTRIM(LTRIM(SUBSTRING(@Texto, 1, CHARINDEX(@Caractere, @Texto, 0) -1))),
             @Texto = RTRIM(LTRIM(SUBSTRING(@Texto, CHARINDEX(@Caractere, @Texto, 0)+ LEN(@Caractere), LEN(@Texto))))
      IF LEN(@Pt) > 0
        BEGIN
          INSERT INTO @Saida 
          SELECT @Pt
        END
    END 

  IF LEN(@Texto) > 0
    BEGIN
      INSERT INTO @Saida 
      SELECT @Texto
    END

  RETURN

END

GO

Fonte: http://social.msdn.microsoft.com/Forums/pt-BR/520/thread/23ab484d-3751-4348-80a8-a723f65225ef/

Assunto relacionado: http://gustavomaiaaguiar.wordpress.com/2011/05/29/funes-escalares-resusabilidade-formatao-preguia-vs-desempenho/

Boa implementação a todos.