我正在使用C#.NET开发一个多项选择考试生成器。每次报告时,都会在数据库中随机挑选问题,随机选择随机选择的问题。我可以做随机问题部分,但我无法改变选择。
我有一个像这样的行的表:
-----------------------------------------------------
|question|answer|distractor1|distractor2|distractor3|
|q1 |ansq1 |d1q1 |d2q1 |d2q1 |
-----------------------------------------------------
我想要的是将答案, distractor1 和 distractor3 列的值改组。例如:
-----------------------------------------------------
|question|answer|distractor1|distractor2|distractor3|
|q1 |d3q1 |d2q1 |d1q1 |ansq1 |
-----------------------------------------------------
这可以使用SQL查询吗?
答案 0 :(得分:1)
以下是使用Dynamic Sql
WHILE 1 = 1
BEGIN
DECLARE @answer SYSNAME = (SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME = 'yourtable' AND COLUMN_NAME NOT IN ( 'question', 'answer')
ORDER BY Newid())
DECLARE @distractor1 SYSNAME = (SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME = 'yourtable' AND COLUMN_NAME NOT IN ( 'question', @answer, 'distractor1' )
ORDER BY Newid())
DECLARE @distractor2 SYSNAME = (SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME = 'yourtable' AND COLUMN_NAME NOT IN ( 'question', @answer, 'distractor2', @distractor1 )
ORDER BY Newid())
DECLARE @distractor3 SYSNAME = (SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME = 'yourtable' AND COLUMN_NAME NOT IN ( 'question', @answer, 'distractor3', @distractor2, @distractor1 )
ORDER BY Newid())
IF @distractor1 IS NOT NULL
AND @distractor2 IS NOT NULL
AND @distractor3 IS NOT NULL
AND @answer IS NOT NULL
BREAK
END
--select @distractor1,@distractor2,@distractor3
exec( 'update yourtable set answer = '+@answer+', distractor1 = '+@distractor1+', distractor2 = '+@distractor2+', distractor3 = '+@distractor3)
select * from yourtable