【发布时间】:2009-01-21 20:31:34
【问题描述】:
我有一个在我的 SQL 服务器数据库中运行存储过程的脚本,问题是存储过程需要一个 uniqueidentifier 参数。我有一个从数据库中获取会话 id 的函数(它是一个 nvarchar),所以 VBScript 将它变成一个字符串,我需要将其转换为将其传递给存储过程。
Function GetOpenSession
Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
conn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=" & Source
rs.CursorLocation = 3
rs.Open "SELECT top 1 OpenSession FROM OpenSessions with (nolock)" , conn, 3, 3
If rs.RecordCount = 0 Then
MsgBox "No Connection"
Else
GetOpenSession = rs.Fields(0).Value
End If
End Function
当我尝试执行存储过程时,我得到“强制转换规范的无效字符值”。
set cnParam = cmd.CreateParameter("@ActiveSession",72,1,,GetOpenSession)
cmd.Parameters.Append cnParam
我无法更改数据库中的任何内容,因此我需要在脚本中解决此问题。
【问题讨论】:
-
你怎么知道“SELECT top 1 OpenSession FROM OpenSessions with (nolock)”会给你活动会话?无论它代表哪个会话,您只是选择第一个 OpenSession 值。
-
此表中存储的唯一会话是活动会话,因此我使用哪个无关紧要。
-
嗯...好吧,但如果您不关心传递给 proc 的 哪个 活动会话 ID,这听起来像是一个奇怪的架构。
-
应用程序确实关心它只使用它自己的会话,我正在测试应用程序所以我不在乎我使用什么会话,只是有一个打开的会话。
标签: sql-server vbscript uniqueidentifier