2010-07-16 43 views
1

你好,我是新的创建存储过程,你可以帮我如何做到这一点。 错误: 关键字'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 
       [email protected] 
       where [email protected] 

    --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,partnumberstatuslblserial.text,lblpartnumber.textlblstatus.text。 我会比较:

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

为我的错误处理程序。

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

那么它们是否相等,则: 我会更新我从cbostatus.text状态如果串行和部分是正确的,那么使用SQL upate。

{ 
Update Table1 SET 
       [email protected], 
       [email protected]sername, 
       [email protected] 

       where [email protected] 
} 


Then insert serialnumber, using sql insert to another table. 
{ 
INSERT INTO Table2 (SerialNumber,DateCreated,Createdby) 
       VALUES 
       (@Serial,@date,@username) 
} 

东西likethis。 “)

+1

@SerialNumber 这是从哪里来的? – iBiryukov 2010-07-16 00:43:30

+0

在对问题进行更新后,您无法像这样混合应用程序和存储过程工作流程,但我仍然不清楚您正在做什么。你有选择部分已经工作? – 2010-07-16 01:48:15

回答

0

糟糕我的帖子是不是那种善意。

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

场景:

我有我的形式做的是,我会输入序列号通过选择SQL它会显示在lblserial.text,lblpartnumber.text SERIALNUMBER,部分号码和状态txtserial.text和lblstatus.text。

安迪会比较:

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

为我的错误处理程序。

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

那么它们是否相等,则:

我会更新我从cbostatus.text状态如果串行和部分是正确的,那么使用SQL更新。

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

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

{ 
    INSERT INTO Table2(SerialNumber, DateCreated, Createdby) 
       VALUES(@Serial, @date, @username) 
} 

这样的事情。

7

你在这里

@Status varchar(50), 
AS 

流氓逗号和名字@Serial@SerialNumber之间蹒跚的这些意图是2个不同的参数?

还什么是此行的目的是什么?

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

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

1

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

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等我不太明白你想做;好像你主要想根据序列号查找一个partnumber,但是你也想做一些独特性测试。如果你能更清楚地阐明目标,这将会有所帮助。

我建议您暂时忽略用户界面的东西。写下一些很好的清理存储过程来封装事务,并且即使从两个不同的连接同时触发,也会做正确的事情。让你的SQL环境中的所有工作都得到满足。然后回到用户界面。

+0

好的先生..我会按照你的意见..我正在学习n层和sql,所以我有更多的问题要求帮助。我只会添加更新,如果我也这样做。 – Crimsonland 2010-07-16 02:36:45