CREATE procedure AutoAddKey
   @KeyName nchar(30),
   @KeyId char(10)  OUTPUT
AS
   select @keyid=isnull(max(@KeyName),str(year(getdate()))+str(month(getdate()))+'0001')  from db_contract where @KeyName like str(year(getdate()))+str(month(getdate()))+'%' 
GO

解决方案 »

  1.   

    1:楼主的@keyName是字段名么?那就只能用动态SQL了
    2:没必要用游标吧?
      

  2.   

    补充一下1. 定义游标好像不能用动态SQL
    2. 尽量不要用游标
      

  3.   

    那如果是动态执行sql语句,应该怎么写这个sql呢?
      

  4.   

    返回存储过程OUTPUT参复和RETURN返回值的原代码
    accessQQ.com 2004-3-4 ---------------------------------
    ALTER PROCEDURE sp_2
    @p int output,
    @p1 int,
    @p2 intas 
    set @p = @p1+@p2
    return 99
    ---------------------------------Function returnP()    Dim cmd As New ADODB.Command
        Set cmd.ActiveConnection = CONN
        '@return_value"这个参数在输入参数的最前面,名称是固定的
    cmd.Parameters.Append cmd.CreateParameter("@return_value", adInteger, adParamReturnValue)'输入和输出的参数顺序同存储过程的参数顺序    cmd.Parameters.Append cmd.CreateParameter("@p", adInteger, adParamOutput)
        
        cmd.Parameters.Append cmd.CreateParameter("@p1", adInteger, adParamInput,,1)
        cmd.Parameters.Append cmd.CreateParameter("@p2", adInteger, adParamInput,,2)    cmd.CommandText = "sp_2"
        cmd.CommandType = adCmdStoredProc    cmd.Execute    Dim i As Integer    For i = 0 To cmd.Parameters.Count - 1
            Debug.Print cmd.Parameters(i).Name & "=" & cmd.Parameters(i).Value
        Next iSet cmd.ActiveConnection = Nothing 
    Set cmd = NothingEnd Function'----------测试---------? returnP()
    @return_value=99
    @p=3
    @p2=2
    @p1=1