如何使用Slick将表作为存储过程的参数传递?

时间:2017-09-05 10:52:02

标签: sql-server scala stored-procedures slick

任何人都可以帮助我并弄清楚将表格从光滑传递到存储过程的最佳做法是什么?目前,我的方法是执行以下操作,但我收到此错误:

Could not find stored procedure 'App_Engage.dbo.retrieve_engage_geo_segment_id @Input'.

以下代码:

在SQL中,我创建了一个表类型:

CREATE TYPE HotelInput AS TABLE(
    hotel_id INT,
    country_id INT
)

我还使用HotelInput表类型作为输入参数创建了一个存储过程,如下所示:

CREATE PROCEDURE dbo.sample_sp
    @input HotelInput READONLY
AS
BEGIN
    -- Do SQL Stuff operations to that table
END

现在,在我的Scala应用程序中,我创建了一些代码来生成HotelInput表,以便将其作为参数传递:

val inputData: Seq[(Int, Int, Int, Int)] = Seq(
    (1,2,3,4),
    (5,6,7,8)
)

val inputValues: String = inputData.map{input => input.productIterator.mkString("(", ",", ")")}.mkString("\n")
val inputQuery =
  s"""
    |DECLARE @Input HotelInput
    |VALUES
    |$inputValues""".stripMargin

最后,我调用存储过程并将其传递给我创建的表:

database.run(sqlu"""$inputQuery + "exec App_Engage.dbo.retrieve_engage_geo_segment_id @Input""")

数据库是JDBC数据库实例(我不包括它的任务,因为它与问题无关)

先谢谢!

0 个答案:

没有答案