【发布时间】:2016-03-09 23:31:59
【问题描述】:
在this question 之后,我需要添加类似
SET LANGUAGE German;
在我的SELECT 查询之前。
我在 ASP/VBScript Web 环境中运行查询,据我所知,这基本上限制了我一次只能进行一个查询。
如果我运行一个查询,例如 -
SET LANGUAGE German; SELECT.....
我收到一条无结果消息,因为返回的“数据”来自 SET 查询,而不是后面的 SELECT。
有什么办法可以在 ASP/VBScript 环境中同时运行SET 和SELECT?
更新: 根据 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 代码,如下所示。
肯定有结果(因为 16 年 2 月 21 日 - 是在星期天,我有匹配的记录) - 但它们没有被显示。事实上,即使通过 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...
顺便问一下 - 查询运行后语言是保持德语还是返回到默认语言?
我想我需要的是一种语言设置,它的默认设置是 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
在这里,它也没有返回任何结果——即使在 SSMS 中...... 我很困扰。感谢所有迄今为止提供帮助的人。
【问题讨论】:
-
也许是
SET NOCOUNT ON;? -
@Lamak So,
SET NOCOUNT ON;SET LANGUAGE German; SELECT...? -
好吧,我会试试的,但我不确定它是否有效,这就是为什么我将其发布为评论而不是答案
-
@Lamak - 谢谢,试过了 - 没用
-
为什么不创建一个存储过程并收工?通过这种方式,您可以设置语言、编号、其他会话变量并在单个“命令”中运行查询而不会出现问题。
标签: sql-server vbscript asp-classic adodb