I would not recommend this approach but I've tried to do it in the past as an experiment and have gotten limited success. Not sure what snag you are hitting but in my case the problem was that Tableau would hit the cache so not every interaction would make a call to the database. In my case, the SP looked like this:
CREATE PROCEDURE [dbo].[Save My Data]
SET NOCOUNT ON;
INSERT INTO [MyDataSaved] VALUES (@Name, @Option)
SET NOCOUNT OFF
I would pass both the Name and Option as parameters selected by the username in the Viz. It's been a long time since this but I think one way to avoid hitting the cache was to also send NOW() as a dummy value when calling the procedure.
Hope this helps!