please suggest to have pk at table level
I guess you have no choice here. PK can only be set "at table level"
...every time remove pk before proc executes then add it at the end of proc execution?
That would be worse possible design. PK shouldn't be dropped and recreated in order to run any stored proc (eg. the one which populates table.)
If you worry about data which potentially will not load due to duplicate values in the PK column, use staging table where it's not PK, validate and then load only valid data into your final destination table.