Pues lo mejor sera que el SP use SQL dinamico (te remito al procedimiento almacenado
sp_executesql, que te permitira hacer lo que pides).
Estuve mirando la posibilidad de usar el tipo sysname ( = nvarchar(128)), pero hice una prueba y obtuve el mismo resultado.
Ejemplo
Código SQL
[-]
CREATE PROCEDURE [dbo].[Buscar_disponibilidad] (@fechaent smalldatetime,@fechasal smalldatetime,@codhab sysname)
AS
begin transaction
declare @tsql nvarchar(4000)
set @tsql = 'select '+char(13)+@codhab+char(13)+' from [0001]'+char(13)+'where fecha>= '''+
convert(varchar(20),@fechaent)+ ''' and fecha<='''+convert(varchar(20),@fechasal)+''''
exec sp_executesql @tsql
commit
A partir de ahi, lo que tu quieras complicarlo...
Espero que te sea de ayuda...
Oscar Noe