Sql 使用Scalaquery测试表/视图是否存在&如果不存在,则创建

Sql 使用Scalaquery测试表/视图是否存在&如果不存在,则创建,sql,scala,scalaquery,Sql,Scala,Scalaquery,我正在编写一些测试来自动检查数据库是否是MS SQL 服务器实例具有某些视图,如果没有,则创建这些视图 使用BasicTable对象的视图。 比如: @Test def CheckAndBuildViewsOnDB() = { VerifyViewExists(FooTable, BarTable) //FooTable et al defined as: FooTable extends BasicTable[Foo], where Foo is a case class &a

我正在编写一些测试来自动检查数据库是否是MS SQL 服务器实例具有某些视图,如果没有,则创建这些视图 使用BasicTable对象的视图。 比如:

  @Test def CheckAndBuildViewsOnDB() = { 
    VerifyViewExists(FooTable, BarTable) //FooTable et al defined as: 
FooTable extends BasicTable[Foo], where Foo is a case class & FooTable 
has a DDL create defined. 
  } 
基于这一点和cribing from,我提出了一个小方法来检查数据库中的视图,以及 check抛出一个异常调用,该调用包含视图的基本表ddl.create:

这对我来说似乎合理,但有两个问题:

这不是将views参数键入BasicTable的正确方法, 导致错误:类BasicTable接受类型参数 映射参数v的作用域发生了一些奇怪的事情, 导致错误:值tableName不是类型参数的成员 T0。 请原谅我对这个问题的无知,因为我怀疑 我的问题在于不理解Scala的类型系统。 伴随着这两个问题的是一种我没有经历过的烦人的感觉
真正完成的VerifyViewExists以最简洁或可读的样式存在。

因为您不关心类型参数是什么,您应该能够通过添加[\uz]来解决1:

def VerifyViewExists(views:BasicTable[_]*) = { 
我猜修复1会导致2消失


顺便说一句,编写foreach可能比映射更好,因为后者会将结果收集到一个新的集合中,我想这不是您想要的。

是的,这就是我缺少的语法位。谢谢
def VerifyViewExists(views:BasicTable[_]*) = {