Building new version of a table and replacing the old one by rename, is it a good idea?
You mentioned that partition switching is more complex but that is not the case when the table is not partitioned.  One can use SWITCH to efficiently replace the entire contents of one non-partitioned table with another as a meta-data only operation.  The requirement for SWITCH is that the source and target table must have the same schema, indexes, constraints, and be storage aligned.  These requirements are presumably the same as the rename technique so the effort is similar.

Note that unlike table partitioning with a partition function and scheme, SWITCH of a non-partitioned table can be used in any SQL Server edition.

Below is a sample DDL script for option B:

CREATE TABLE dbo.Device(
      DeviceID int NOT NULL
        CONSTRAINT PK_Device PRIMARY KEY CLUSTERED ON [PRIMARY]
    , DeviceName varchar(30) NOT NULL
    );
CREATE INDEX idx_Device_DeviceName ON dbo.Device(DeviceName) ON [PRIMARY];
GO

CREATE TABLE dbo.Device_new(
      DeviceID int NOT NULL
        CONSTRAINT PK_Device_new PRIMARY KEY CLUSTERED ON [PRIMARY]
    , DeviceName varchar(30) NOT NULL
    );
CREATE INDEX idx_Device_new_DeviceName ON dbo.Device_new(DeviceName) ON [PRIMARY];
GO

CREATE PROCEDURE dbo.RefreshDevice
AS

SET XACT_ABORT ON;

BEGIN TRY

    TRUNCATE TABLE dbo.Device_new;

    --load dbo.Device_new with new data here

    BEGIN TRAN;

    TRUNCATE TABLE dbo.Device;

    ALTER TABLE dbo.Device_new
        SWITCH TO dbo.Device;

    COMMIT;

END TRY
BEGIN CATCH

    IF @@TRANCOUNT &gt; 0 ROLLBACK;

    THROW;

END CATCH;
GO