如何编写更新查询以使用SQL数据源更新两个表?

时间:2011-04-22 11:18:27

标签: sql sql-server tsql sql-update

是否可以使用SQL数据源和ASP.NET网格视图更新两个表?我有Select语句的以下SQL查询。

SELECT 
   tbl_user_login.ID, tbl_user_login.UserID, 
   tbl_user_login.Pass, tbl_user_login.Enabled, 
   tbl_user_login.Permission, tbl_user_login.Rank, 
   tbl_user_profile.ID AS Expr1, tbl_user_profile.FName,
   tbl_user_profile.LName, tbl_user_profile.Phone, 
   tbl_user_profile.Email1, tbl_user_profile.Email2 
FROM 
   tbl_user_login 
INNER JOIN 
   tbl_user_profile ON tbl_user_login.ID = tbl_user_profile.ID

但我不知道如何在SQL数据源中编写更新和删除语句

更新

所以我写了商店程序。

CREATE PROCEDURE UpdateTwoTable 
(
    @ID int, 
    @UserID varchar(10), 
    @Pass varchar(50), 
    @Enabled int, 
    @Permission int,
    @Rank int,
    @FName varchar(50),
    @LName varchar(50),
    @Phone varchar(50),
    @Email1 varchar(50),
    @Email2 varchar(50)
) AS

BEGIN TRANSACTION

UPDATE tbl_user_login SET UserID = @UserID, Pass = @Pass, Enabled = @Enabled, Permission = @Permission, Rank = @Rank WHERE ID = @ID

IF @@ERROR <> 0
BEGIN
    ROLLBACK
    RETURN
END

UPDATE tbl_user_profile SET FName = @FName, LName = @LName, Phone = @Phone, Email1 = @Email1, Email2 = @Email2 WHERE ID = @ID

IF @@ERROR <> 0
BEGIN
    ROLLBACK
    RETURN
END

COMMIT

但我得到了Procedure or function UpdateTwoTable has too many arguments specified.

更新

我遵循了本指南,现在问题解决了。感谢所有帮助过的人!

http://www.whitworth.org/2006/01/16/how-to-troubleshoot-procedure-or-function-has-too-many-arguments-specified-in-aspnet-20/

下面是我的SQL数据源。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:DBConnString %>" 
        SelectCommand="SELECT tbl_user_login.ID, tbl_user_login.UserID, tbl_user_login.Pass, tbl_user_login.Enabled, tbl_user_login.Permission, tbl_user_login.Rank, tbl_user_profile.ID AS Expr1, tbl_user_profile.FName,
tbl_user_profile.LName, tbl_user_profile.Phone, tbl_user_profile.Email1, tbl_user_profile.Email2 FROM tbl_user_login INNER JOIN tbl_user_profile ON tbl_user_login.ID = tbl_user_profile.ID" 
        UpdateCommand="UpdateTwoTable" UpdateCommandType="StoredProcedure"
        OldValuesParameterFormatString="Original_{0}">
        <UpdateParameters>
            <asp:Parameter Name="ID" />
            <asp:Parameter Name="UserID"/>
            <asp:Parameter Name="Pass"/>
            <asp:Parameter Name="Enabled"/>
            <asp:Parameter Name="Permission"/>
            <asp:Parameter Name="Rank"/>
            <asp:Parameter Name="FName"/>
            <asp:Parameter Name="LName"/>
            <asp:Parameter Name="Phone"/>
            <asp:Parameter Name="Email1"/>
            <asp:Parameter Name="Email2"/>
        </UpdateParameters>        
    </asp:SqlDataSource>

3 个答案:

答案 0 :(得分:5)

是的,这是可能的。以下是如何以安全的方式进行的操作:

CREATE PROCEDURE UpdateUser (@ID int, @Pass varchar(15), @Email varchar(75)) AS

BEGIN TRANSACTION

    UPDATE tbl_user_login SET Pass = @Pass WHERE ID = @ID

    IF @@ERROR <> 0
    BEGIN
        ROLLBACK
        RETURN
    END

    UPDATE tbl_user_profile SET Email1 = @Email WHERE ID = @ID

    IF @@ERROR <> 0
    BEGIN
        ROLLBACK
        RETURN
    END

COMMIT

通过这种方式,您不必担心任何更新引起的错误。这意味着:如果其中任何一个失败,整个操作将被取消,您的数据库中不会有不一致的数据。

有关Transactions的使用的更多信息,请访问:http://www.4guysfromrolla.com/webtech/080305-1.shtml

基本DELETE statement为:DELETE FROM <tablename> WHERE <condition>

答案 1 :(得分:1)

CREATE PROC UpdateUser
(
    @ID int
    ,@Pass varchar(15)
    ,@Email varchar(75)
   ) AS
BEGIN

Update
   tbl_user_login
Set
   Pass = @Pass
Where
   ID = @ID

Update
  tbl_user_profile
Set
  Email1 = @Email
Where
  ID = @ID

END

如上所述,您可以将多个sql命令写入单个sproc中。根据需要展开更新。删除工作方式相同......

答案 2 :(得分:0)

<asp:SqlDataSource runat="server":
    SelectCommand="SELECT ... "
    UpdateCommand="UPDATE a; UPDATE b;"
    DeleteCommand="DELETE FROM a; DELETE FROM b;" />

不起作用吗?