【发布时间】:2011-08-01 21:04:43
【问题描述】:
我正在尝试使用存储过程来显示表的结果、关联的表或数据库的最新更改。存储过程是:
set ANSI_NULLS ON
set NOCOUNT ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[MKTG_Current]( @added smalldatetime OUTPUT, @named varchar(50) OUTPUT)
AS
DECLARE @pDate smalldatetime;
DECLARE @AIID int;
DECLARE @Table varchar(50);
DECLARE @Bork nvarchar(350);
SET @pDate = GETDATE()
SELECT @Table=[Table], @AIID=AIID, @added=date_added FROM MKTG_Recent WHERE date_added > DATEDIFF(day, date_added, DATEADD(DD, 30, @pDate))
SET @named = @Table
SET @Bork = 'SELECT * FROM ' + QUOTENAME(@Table) + ' WHERE AIID= ' + cast(@AIID as varchar(100))
EXECUTE sp_executesql @Bork, @added OUTPUT, @named OUTPUT
SELECT @added, @named
除了 select 语句的结果之外,它还应该返回项目。存储过程没有输入。存储过程在 SQL Management Studio (2008) 中编译良好,但页面返回错误: Microsoft OLE DB Provider for SQL Server 错误“80040e14”
过程需要“ntext/nchar/nvarchar”类型的参数“@parameters”。 index.asp,第 61 行
页面第 61 行以粗体显示:
dim Objrs, cmd
set Objrs = Server.CreateObject("ADODB.RecordSet")
set cmd = Server.CreateObject("ADODB.Command")
set conn = Server.CreateObject("ADODB.Connection")
conn.Open strConnect
set cmd.ActiveConnection = conn
cmd.CommandText="MKTG_Current"
cmd.CommandType=adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("@added", 135, 2)
cmd.Parameters.Append cmd.CreateParameter("@named", 200, 2, 50)
Line 61 **set Objrs = cmd.Execute**
name_of_table = cmd.Parameters("@named")
added = cmd.Parameters("@added")
我的印象是这是由 SQL 代码错误引起的,但我没有看到它。快速检查 Objrs.state 会返回 0,这意味着问题肯定出在 SQL 代码中。对于我的一生,我无法确定为什么会产生这个错误。
【问题讨论】:
-
检查你是否有相同的 SP 但有另一个参数列表(见不在 dbo 模式中)
-
另一条评论 - 如果在您的 WHERE 子句时间范围内的 MKTG_Recent 中更新了多个表,您知道您将获得哪个表吗?我当然不会。
标签: sql sql-server stored-procedures asp-classic