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

标签 sql sql-server tsql sql-update

是否可以使用 SQL 数据源和 ASP.NET GridView 更新两个表?我有以下 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

但我得到 过程或函数 UpdateTwoTable 指定的参数太多。

更新

我遵循了这个指南,现在问题已经解决了。感谢所有提供帮助的人!

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>

最佳答案

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

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 的使用这里:https://web.archive.org/web/20210513004758/https://www.4guysfromrolla.com/webtech/080305-1.shtml

基础DELETE statement是:DELETE FROM <tablename> WHERE <condition>

关于sql - 如何编写更新查询以使用 SQL 数据源更新两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5754869/

相关文章:

sql - T-SQL参数嗅探重新编译计划

sql - 不是 GROUP BY 表达式

mysql - 如何创建基于日期时间排除的sql View

C#运行临时存储过程

sql-server-2005 - 从 'Y' 或 'N' 转换为位

sql-server - SQL Server 中用户定义表类型的性能

SQL 生成 2 个已知整数之间的有效值范围

SQL Server : INSERT from one table to another table

c# - 在数据访问项目中使用 web.config 连接字符串

c# - 如何使用具有数据库优先方法的 DbModelBuilder 来实现软删除