如何处理存储过程?

时间:2010-07-16 00:38:57

标签: sql sql-server stored-procedures

您好我是创建存储过程的新手可以帮助我如何做到这一点。 错误: 关键字“AS”附近的语法不正确。 必须声明标量变量@Serial。

CREATE PROCEDURE sp_SIU
    -- Add the parameters for the stored procedure here
    @Serial varchar(50),
    @Part varchar(50),
    @Status varchar(50),
AS
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    /*SET NOCOUNT ON;*/

    -- Insert statements for procedure here
    --where in my form if i enter serial number it will show select values  
    Select SerialNumber,PartNumber,Status from Table1 where SerialNUmber = @Serial

    --Then if is correct it will Update Status on combobox

       Update Table1 SET
               Status=@Status
                 where SerialNumber=@SerialNumber

    --then Insert Serial Number,Parnumber to Table 2

        DECLARE @Count int
    select @Count = Count(SerialNumber) from Table1 WHERE SerialNumber = @Serial

    IF @Count = 0 
        BEGIN
                INSERT INTO Table2 (SerialNumber,PArtNumber) 
                VALUES 
                (@Serial, @Part)
        END 
        RETURN @Count

    RETURN

编辑:已移动更新的信息已发布为问题

的答案

哎呀我的帖子不是那种小姐。 可以在一个存储过程中连接这个3 sql字符串吗?

方案: { 我在表格中要做的是,我将使用选择的sql输入序列号txtserial.text,它将在serialnumber,partnumber和{{1}上显示statuslblserial.text,lblpartnumber.text }}。 我会比较:

lblstatus.text

我的错误处理程序。

txtserial.text == lblserial.text
txtpartnumber.text == lblpartnumber.text

然后如果他们是平等的话: 如果序列和部分正确,我将从cbostatus.text更新我的状态,然后使用sql upate。

{
Select SerialNumber,PartNumber,Status from Table1 where SerialNUmber = @Serial
}
这是什么东西。 “)

3 个答案:

答案 0 :(得分:7)

你这里有一个流氓逗号

    @Status varchar(50),
AS

@Serial@SerialNumber之间的名称是2个不同的参数吗?

这条线的目的是什么?

  Select SerialNumber,PartNumber,Status from Table1 where SerialNUmber = @Serial

目前它只会将3列结果集发回给调用应用程序。这是它打算做什么(它似乎不符合以下评论,这似乎意味着它意味着某种检查)?

答案 1 :(得分:1)

是的,您可以在一个存储过程中执行3个SQL语句。您可能希望在sproc中声明一些局部变量来保存中间结果,即

CREATE PROCEDURE BLAHBLAH
@SerialNumber VarChar(50)
AS
BEGIN
DECLARE @partnumber varchar(50);
SELECT @partnumber = partnumber FROM Table WHERE serialnumber = @SerialNumber;
...
SELECT @partnumber; --- return as recordset
RETURN @partnumber; --- return as return value
END

然后你可以稍后插入@partnumber,测试@partnumber,返回@partnumber等。我不太明白你想做什么;好像你最想查找基于序列号的部件号,但是你也希望做一些唯一性测试。如果你能更多地澄清目标,那将会有所帮助。

我建议您暂时忽略用户界面的内容。给自己写一些很好的干净存储过程来封装事务,即使从两个不同的连接同时触发,它也会做正确的事情。在SQL环境中让所有工作都令您满意。然后返回用户界面。

答案 2 :(得分:0)

哎呀我的帖子不是那种小姐。

可以在一个存储过程中加入这个3 sql字符串吗?

情景:

我在表单中要做的是,我将使用select sql输入序列号到txtserial.text,它将在lblserial.text,lblpartnumber.text和lblstatus.text上显示serialnumber,partnumber和status。

我会比较:

  • txtserial.text == lblserial.text
  • txtpartnumber.text == lblpartnumber.text

我的错误处理程序。

{
Select SerialNumber,PartNumber,Status from Table1 where SerialNUmber = @Serial
}

然后,如果它们相等,那么:

如果序列和部分正确,我将从cbostatus.text更新我的状态,然后使用sql update。

{
    Update Table1 
    SET Status = @Status,
        Modifiedby = @username,
        DateModified = @Date
    where SerialNumber = @Serial
}

然后插入serialnumber,使用sql insert到另一个表。

{
    INSERT INTO Table2(SerialNumber, DateCreated, Createdby) 
                VALUES(@Serial, @date, @username)
}
像这样的东西。