运行 'SET' 命令在 SQL 之前,在 SELECT 之前

Running 'SET' command in SQL, prior to SELECT

之后,我需要添加类似

的内容
SET LANGUAGE German;

在我的 SELECT 查询之前。 我在 运行 网络环境中 运行 进行查询,据我所知,这基本上限制了我一次只能进行一个查询。 如果我 运行 查询如 -

SET LANGUAGE German; SELECT.....

我收到一条无结果消息,因为 'data' returned 来自 SET 查询,而不是它后面的 SELECT

在 ASP/VBScript 环境下,运行 SETSELECT 有什么可以一起做的吗?

更新: 根据 Lankymarts 的建议:

set rs = SERVER.CreateObject("ADODB.recordset")
rs.open sql, conn, 1, 2

Do While (rs.State = 0 Or rs Is Not Nothing)  // also tried: Do While (rs.State = 0 AND rs Is Not Nothing) 
 Set rs = rs.NextRecordset
Loop

do while not rs.eof
  response.write ...

更新 2:
现在关闭的记录集问题已经解决,我仍然没有从主记录集中获取行。 这是我的 VBScript 代码,如下所示。 肯定有结果(因为 21/feb/16 - 在星期天,我有匹配的记录) - 但它们没有显示。事实上,即使通过 SSMS 显示,有时我也得不到结果 - 也许它对语言变化感到困惑?

    sql = " SET LANGUAGE German; "
    sql = sql & " SELECT [tblstudentrakazot].studentid, firstname, lastname, tblRakezetSchedule.* FROM tblRakezetSchedule"
    sql = sql & " INNER join [tblstudentrakazot] on [tblstudentrakazot].scheduleID = tblRakezetSchedule.scheduleid "
    sql = sql & " INNER join tblstudents on [tblstudentrakazot].studentid = tblstudents.studentid"
    sql = sql & " WHERE CONVERT(int,scheduleday) = datepart(d,convert(datetime,'" & cleanSQL(planneddate) & "',103)) AND "
    sql = sql & " tblRakezetSchedule.rakezetID = " & CleanSQL(x_rakezetID)
    sql = sql & " ORDER BY replace(scheduletimefrom, ':', '')"

    response.Write("### " & sql)
    set rs = SERVER.CreateObject("ADODB.recordset")
    rs.open sql, conn, 1, 2

    Do While rs.State = 0 And Not rs Is Nothing
     Set rs = rs.NextRecordset
    loop 


    do while not rs.eof 
       ' we now proceed to loop through the actual result recordset : studentid, firstname etc... 

顺便问一下 - 在查询具有 运行 后,语言是否仍为德语,还是 return 为默认语言?

我想我在这里需要的是一种语言设置,其默认设置为 dd/mm/yyyy(由于系统中的其他遗留要求),并且 DATEFIRST 是星期日 (1)。

另外: 我尝试制作一个存储过程,如下所示:

    ALTER PROCEDURE [dbo].[procListRakezetSlotsByDay] @planneddate nvarchar(10),  @rakezetID int

    AS
    BEGIN

        SET NOCOUNT ON;
        SET LANGUAGE German;

    SELECT [tblstudentrakazot].studentid, firstname, lastname, tblRakezetSchedule.* FROM tblRakezetSchedule
    INNER join [tblstudentrakazot] on [tblstudentrakazot].scheduleID = tblRakezetSchedule.scheduleid 
    INNER join tblstudents on [tblstudentrakazot].studentid = tblstudents.studentid
    WHERE CONVERT(int,scheduleday) = datepart(d,convert(datetime,@planneddate,103)) AND tblRakezetSchedule.rakezetID = @rakezetID
    ORDER BY replace(scheduletimefrom, ':', '')


    END

然后运行它:

    DECLARE @return_value int

    EXEC    @return_value = [dbo].[procListRakezetSlotsByDay]
            @planneddate = N'28/2/2016',
            @rakezetID = 182

    SELECT  'Return Value' = @return_value

    GO

这里也是,return没有结果 - 即使在 SSMS 中...... 我很迷茫。感谢迄今为止提供帮助的所有人。

这是一种误解。 ASP/VBScript 都不限制您,限制是由 ADODB 用于执行命令的提供程序强加的。就 SQL 服务器而言,虽然在执行包含多个查询的命令时没有限制 (我知道)

第一个

SET LANGUAGE German;

并不是真正的 returning 查询,但提供者将 return 它作为一个封闭的 ADODB.Recordset 对象,这并不理想,但有一个简单的修复方法。

SET NOCOUNT ON;

将禁止发送 DONE_IN_PROC 消息表明执行行成功,ADODB 将其解释为关闭的 ADODB.Recordset 对象。

另一种处理此问题的方法,但不像 ADODB.Recordset 对象的 SET NOCOUNT ON is to use the NextRecordSet() 方法那样直接,它会遍历各种结果集,直到找到实际的查询结果。

假设 rs 是我们的起始 ADODB.Recordset 对象

Do While (rs.State = adStateClosed And Not rs Is Nothing)
 Set rs = rs.NextRecordset
Loop

将 return 第一个 ADODB.Recordset 未处于关闭状态的对象。

From MSDN - NextRecordset Method (ADO)

As long as there are additional results and the Recordset containing the compound statements is not disconnected or marshaled across process boundaries, the NextRecordset method will continue to return Recordset objects. If a row-returning command executes successfully but returns no records, the returned Recordset object will be open but empty. Test for this case by verifying that the BOF and EOF properties are both True. If a non–row-returning command executes successfully, the returned Recordset object will be closed, which you can verify by testing the State property on the Recordset. When there are no more results, recordset will be set to Nothing.