You will need to declare this table variable inside the Dynamic sql as dynamic sql has its own scope, variable declared outside of dynamic sql are not visible inside dynamic sql.
And also use OUTPUT clause when trying to retrieve values from a dynamic sql query. Something like this....
declare @sZone nvarchar(50)
declare @sSubCode nvarchar(50)
declare @c_Geography nvarchar(50)='Geo'
declare @c_DayOfWeek nvarchar(50)='SUN'
declare @sImport_Table nvarchar(500)='@sImport_Table1'
--SELECT * FROM @sImport_Table1
declare @sQuery nvarchar(MAX); --<-- to be on safe side
SET @sQuery = N' declare @sImport_Table1 table
(
Id int identity(1,1) ,
Zone nvarchar(50),
Sub_Code nvarchar(50),
Geography nvarchar(50),
DayOfWeek nvarchar(50)
)
INSERT INTO @sImport_Table1 SELECT ''A'',''Z'',''Geo'',''SUN''
SELECT @sZone = Zone, @sSubCode = Sub_Code ' +
N' FROM @sImport_Table1 ' +
N' WHERE Geography = @c_Geography ' +
N' AND [DayOfWeek] = @c_DayOfWeek '
PRINT @sQuery
EXECUTE sp_executesql @sQuery
,N'@c_Geography nvarchar(50),@c_DayOfWeek nvarchar(50),
@sZone nvarchar(50) OUTPUT, @sSubCode nvarchar(50) OUTPUT'
,@c_Geography , @c_DayOfWeek, @sZone OUTPUT, @sSubCode OUTPUT
SELECT @sSubCode, @sZone