验证SQL查询和结果集

时间:2012-12-26 05:42:06

标签: sql c#-4.0 azure amazon-web-services azure-sql-database

我正在开展一个教育项目,让学生测试他们的SQL技能; 我们创造了一些问题并要求学生解决它们。

问题出现在这里:

  1. 如何创建SQL问题?我的意思是,假设我要求学生创建一个包含一些约束和数据类型的表,这个表将在哪里创建?在我的生产数据库中?我猜不会;如果我将我的数据库暴露给最终用户[邪恶],他们会试图破坏它。
  2. 如何验证结果集[Create/Alter/Insert/Update/Rename]
  3. 如何为不同用户的答案建立隔离?
  4. 我不知道SQL Fiddle如何处理这些场景,但我的要求与SQL Fiddle相同。

    我发现Validation of Scripts但这是特定于SQL Server的,我的问题不仅限于一个平台(DBMS)。

1 个答案:

答案 0 :(得分:2)

如果您希望在SQL服务器中提供一个自由格式窗口,允许学生执行查询但不破坏数据库(如SQL Fiddle所做),那么最简单的方法是构建一个需要的Web应用程序他们的SQL作为输入并在事务中运行它。在执行时从每个查询中捕获结果集。执行每个SQL语句后,回滚事务;然后,他们的任何更改都不会提交给服务器。

如果你怀疑你的学生非常顽皮,并且会不顾一切地破坏数据库(正如我对SQL Fiddle用户那样),那么你将不得不防范明确的事务提交,例如commit transaction;。防范这种情况是高度数据库特定的;我建议查看through my code on github以了解我如何保护SQL Fiddle的各种数据库(提示 - 最容易保护的服务器是PostgreSQL;如果可以,请使用它)。您可能还会发现有趣的是阅读关于阻止显式提交的主题的dba.se上的问题:Disable explicit commits in JDBC, detect them in SQL, or put the database in a readonly state