Sql server 如何在一个查询中更新2个表
我有两张桌子:Sql server 如何在一个查询中更新2个表,sql-server,vb.net,sql-update,Sql Server,Vb.net,Sql Update,我有两张桌子: 登录具有4个属性: 1. NRIC 2. NAME 3. PASSWORD 4. TYPE (USER / ADMIN) 1. NRIC 2. NAME 3. PASSWORD 4. EMAIL 详细信息具有4个属性: 1. NRIC 2. NAME 3. PASSWORD 4. TYPE (USER / ADMIN) 1. NRIC 2. NAME 3. PASSWORD 4. EMAIL 如果更新了表详细信息,我希望更新表登录名 例如,
登录
具有4个属性:
1. NRIC
2. NAME
3. PASSWORD
4. TYPE (USER / ADMIN)
1. NRIC
2. NAME
3. PASSWORD
4. EMAIL
详细信息
具有4个属性:
1. NRIC
2. NAME
3. PASSWORD
4. TYPE (USER / ADMIN)
1. NRIC
2. NAME
3. PASSWORD
4. EMAIL
如果更新了表详细信息
,我希望更新表登录名
例如,如果更新了表详细信息中的密码
,则假定的表登录
也应更新
SQLCmd.CommandText = "UPDATE DETAILS set PASSWORD='" & TextBoxPassword.Text & "',EMAIL='" & TextBoxEmail.Text & "' WHERE NRIC='" & myVar2 & "'"
如何更新它们 首先更新详细信息表。
然后提交更改。
然后更新登录表。
事务:D为此使用SqlTransaction,下面是参考代码:
C#:
SqlConnection conn = new SqlConnection("[Your connection string]");
conn.Open();
SqlTransaction Trans = conn.BeginTransaction();
SqlCommand SQLCmd = new SqlCommand("",conn);
SQLCmd.Transaction = Trans;
try
{
SQLCmd.CommandText = "UPDATE DETAILS set PASSWORD='" & TextBoxPassword.Text & "',EMAIL='" & TextBoxEmail.Text & "' WHERE NRIC='" & myVar2 & "'";
SQLCmd.ExecuteNonQuery();
SQLCmd.CommandText = "UPDATE Login set PASSWORD='" & TextBoxPassword.Text & "' WHERE NRIC='" & myVar2 & "'";
SQLCmd.ExecuteNonQuery();
Trans.Commit();
}
catch
{
Trans.Rollback();
}
finally {
conn.Close();
}
Dim conn As New SqlConnection("[Your connection string]")
conn.Open()
Dim Trans As SqlTransaction = conn.BeginTransaction()
Dim SQLCmd As New SqlCommand("", conn)
SQLCmd.Transaction = Trans
Try
SQLCmd.CommandText = "UPDATE DETAILS set PASSWORD='" And TextBoxPassword.Text And "',EMAIL='" And TextBoxEmail.Text And "' WHERE NRIC='" And myVar2 And "'"
SQLCmd.ExecuteNonQuery()
SQLCmd.CommandText = "UPDATE Login set PASSWORD='" And TextBoxPassword.Text And "' WHERE NRIC='" And myVar2 And "'"
SQLCmd.ExecuteNonQuery()
Trans.Commit()
Catch
Trans.Rollback()
Finally
conn.Close()
End Try
VB:
SqlConnection conn = new SqlConnection("[Your connection string]");
conn.Open();
SqlTransaction Trans = conn.BeginTransaction();
SqlCommand SQLCmd = new SqlCommand("",conn);
SQLCmd.Transaction = Trans;
try
{
SQLCmd.CommandText = "UPDATE DETAILS set PASSWORD='" & TextBoxPassword.Text & "',EMAIL='" & TextBoxEmail.Text & "' WHERE NRIC='" & myVar2 & "'";
SQLCmd.ExecuteNonQuery();
SQLCmd.CommandText = "UPDATE Login set PASSWORD='" & TextBoxPassword.Text & "' WHERE NRIC='" & myVar2 & "'";
SQLCmd.ExecuteNonQuery();
Trans.Commit();
}
catch
{
Trans.Rollback();
}
finally {
conn.Close();
}
Dim conn As New SqlConnection("[Your connection string]")
conn.Open()
Dim Trans As SqlTransaction = conn.BeginTransaction()
Dim SQLCmd As New SqlCommand("", conn)
SQLCmd.Transaction = Trans
Try
SQLCmd.CommandText = "UPDATE DETAILS set PASSWORD='" And TextBoxPassword.Text And "',EMAIL='" And TextBoxEmail.Text And "' WHERE NRIC='" And myVar2 And "'"
SQLCmd.ExecuteNonQuery()
SQLCmd.CommandText = "UPDATE Login set PASSWORD='" And TextBoxPassword.Text And "' WHERE NRIC='" And myVar2 And "'"
SQLCmd.ExecuteNonQuery()
Trans.Commit()
Catch
Trans.Rollback()
Finally
conn.Close()
End Try
那些已经用“提交并回滚”解决方案发布答案的人是错误的。这些解决方案并不认为查询实际上执行了“更新”的细节。此解决方案确保在执行第二个查询之前,第一个查询实际“更新”了一行的详细信息 这里的代码比SQL解决方案更像VB:
Dim intTotalRowsUpdated As Integer
SQLCmd.CommandText = "UPDATE DETAILS set PASSWORD='" & TextBoxPassword.Text & "',EMAIL='" & TextBoxEmail.Text & "' WHERE NRIC='" & myVar2 & "'"
intTotalRowsUpdated = SQLCmd.ExecuteNonQuery()
If intTotalRowsUpdated > 0 Then
SQLCmd.CommandText = "UPDATE login set PASSWORD='" & TextBoxPassword.Text & "',EMAIL='" & TextBoxEmail.Text & "' WHERE NRIC='" & myVar2 & "'"
SQLCmd.ExecuteNonQuery
End If
如果你真的在寻找更新一个表,只要更新了一个表,你可能需要考虑一个触发器:
create trigger trigUpdateDetails
on details
after update
as
begin
update login
set
password=ins.password
from login td
join inserted ins on td.nric = ins.nric
end
此触发器会导致详细信息表的任何更新也会更新登录表的密码字段,无论更新是源于客户端应用程序还是源于在数据库级别运行的语句
更多信息:
这篇文章有点过时,但文章中的信息仍然相关。您可以使用存储过程来执行此任务。
像下面这样
CREATE PROC proc_UpdateProcedure
@PASSWORD VARCHAR(100),
@NRIC INT
AS
DECLARE @Ret INT
BEGIN TRANSACTION
BEGIN TRY
-- UPDATE DETAILS TABLE
UPDATE DETAILS SET PASSWORD = @PASSWORD WHERE NRIC = @NRIC
-- UPDATE Login TABLE
UPDATE Login SET PASSWORD = @PASSWORD WHERE NRIC = @NRIC
COMMIT TRANSACTION
SET @Ret = 1
SELECT @Ret
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
SET @Ret = 0
SELECT @Ret
END CATCH
如果您将其更改为参数化sql,我将给您一个+1。