I'm writing a simple voting script and have columns for each options. I need to update the data based on whichever option the user picks.
I.e...
If the user picks option 1 then execute UPDATE mytable SET option1 = option1 + 1
If the user picks option 2 then execute UPDATE mytable SET option2 = option2 + 1
Etc., etc.
What's the best way to do that without building an ad-hoc SQL statement? There could be many options so I dont want to have lots of redundant SQL statements.
Can I just use a varible in a stored proc and do something like this?
UPDATE mytable SET @.optionUserpicked=@.optionUserpicked + 1
Thanks in advance
You can't really.
The best way is to redesign your table, so that it looks like this:
VoteID / Option (or optionID) / Votes
1,1,0
1,2,0
Then you can execute something like this:
UPDATE MyTable SET votes=votes+1 WHERE VoteID=1 ANDOption=@.option
Assuming that you are going to have multiple "polls", each uses a different VoteID. Each poll can then also have a variable number of options. It will also make reporting the final results easier as well.
|||Maybe we can make a trick using dynamic SQL. For exampe:
create table myTable (UID int identity(1,1),option1 int,option2 int,option3 int)
go
INSERT INTO myTable (option1,option2,option3) SELECT 0,0,0
go
CREATE PROCEDURE sp_UpdVote @.opName sysname='option1',@.pkCol sysname='UID'
AS
IF (@.opName=@.pkCol)
RAISERROR('Can''t update the primary key',16,1)
ELSE
IF (exists(SELECT name FROM syscolumns
WHERE id=OBJECT_ID('myTable') ANDname=@.opName))
EXEC('UPDATE myTable SET ['+@.opName+']= ['+@.opName+']+1')
ELSE RAISERROR('There is no column named [%s] in this table.',16,1,@.opName)
go
EXEC sp_UpdVote
go
SELECT * FROM myTable
No comments:
Post a Comment