T-SQL 351 bytes
This is so wrong... but anyway:
DECLARE @ INT=1,@n INT=10,@a VARCHAR(MAX),@b VARCHAR(MAX),@c CHAR='#',@s VARCHAR(MAX)=''WHILE @<=@n BEGIN SET @a=concat(@a,@c)SET @b=concat(@b,(SELECT CASE WHEN @=1THEN @c WHEN @=@n THEN @c ELSE' 'END))SET @=@+1 END SET @=1 WHILE @<=@n BEGIN SET @s=@s+(SELECT CASE WHEN @=1THEN @a WHEN @=@n THEN CHAR(13)+@a ELSE CHAR(13)+@b END)SET @=@+1 END PRINT @s
Ungolfed:
DECLARE @ INT=1,
@n INT=10,
@a VARCHAR(MAX),
@b VARCHAR(MAX),
@c CHAR='#',
@s VARCHAR(MAX)=''
WHILE @<=@n
BEGIN
SET @a=concat(@a,@c)
SET @b=concat(@b,(SELECT CASE WHEN @=1THEN @c WHEN @=@n THEN @c ELSE' 'END))
SET @=@+1;
END
SET @=1
WHILE @<=@n
BEGIN
SET @s=@s+
(SELECT
CASE
WHEN @=1THEN @a
WHEN @=@n THEN CHAR(13)+@a
ELSE CHAR(13)+@b
END
)
SET @=@+1
END
PRINT @s