Sql server 列出sql server UDF中以经典asp格式返回表的记录

Sql server 列出sql server UDF中以经典asp格式返回表的记录,sql-server,asp-classic,ado,user-defined-functions,Sql Server,Asp Classic,Ado,User Defined Functions,我编写了第一个sql Server返回表UDF,因为它比使用SP更好 但是,while可以轻松地从sql server检索结果。。我无法从经典的ASP ADO调用它 UDF如下: CREATE FUNCTION dbo.udf_Alert ( @I nvarchar (30), @L nvarchar (10) ) RETURNS TABLE AS RETURN ( SELECT a.Message, a.Height, a.backgroundColor, a.isFree

我编写了第一个sql Server返回表UDF,因为它比使用SP更好 但是,while可以轻松地从sql server检索结果。。我无法从经典的ASP ADO调用它

UDF如下:

CREATE FUNCTION dbo.udf_Alert 
(
  @I nvarchar (30),
  @L nvarchar (10)
)
RETURNS TABLE AS RETURN 
(
  SELECT a.Message, a.Height, a.backgroundColor, a.isFree
    from Advice a 
    join ActiveMessages b on b.MessageID=a.MessageID
    join Items i on b.ItemID=i.ItemID
    join Sellers s on i.UserID=s.UserID
    join Users u on u.UID=s.UID
  WHERE 
    (i.ItemID=@I and a.Active='1' and b.Active='1' and i.active='1' and i.Show='1' and CHARINDEX('ALERT',u.Modules)>0
    and a.ValidFrom<GETDATE() and a.ValidTo>GETDATE() and u.PaidUntil>GETDATE() and charindex(@L,a.Languages)>-1 or charindex('all',a.Languages)>-1 )
UNION ALL
  SELECT a.Message, a.Height, a.backgroundColor, a.isFree
  FROM Advice a, Users u
  WHERE      u.isFree='1' and a.isFree='1' and (CHARINDEX(@L,a.Languages)>-1 or Charindex('all',a.Languages)>-1)
)
但是我必须嵌入到一个经典的ASP例程中,但我还没有找到方法

尝试了SP方法。。但我在尝试设置参数时出错: 以下是我所尝试的:

sql="Select dbo.udf_Alert('xx','yy')"   
dim cmdA
set cmdA = Server.CreateObject("ADODB.Command")
cmdA.ActiveConnection= cn
cmdA.CommandType=4
cmdA.CommandText=sql
cmda.Parameters.Append cmdA.CreateParameter("fd", nvarchar, adParamInput,30, itemID)
cmda.Parameters.Append cmdA.CreateParameter("fde", nvarchar, adParamInput,10, LanguageID)
'   cmdA.Parameters("@I")=ItemID     '<-----ERRROR HERE
'   cmdA.Parameters("@L")=LanguageID
set rs=cmdA.Execute()
你能提出一些建议吗

谢谢
Sergio

我们倾向于在一对一的基础上为UDF创建存储过程“包装器”,它可以直接从web代码中调用。例如,这可能看起来像

CREATE PROCEDURE [dbo].[pr_Alert] 
  @I nvarchar (30),
  @L nvarchar (10)
AS

SELECT * FROM testDb.dbo.udf_Alert(@I, @L)

RETURN
然后,您的commandText将只是包装器SP的名称,“pr_Alert”


希望这有帮助。

嗨!谢谢。。很管用。。但是。。那么直接编写带有表输出的SP可能会更简单。。。还是最好写UDF+SP?再次感谢。
ADODB.Command error '800a0bb9'
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
CREATE PROCEDURE [dbo].[pr_Alert] 
  @I nvarchar (30),
  @L nvarchar (10)
AS

SELECT * FROM testDb.dbo.udf_Alert(@I, @L)

RETURN