我正在使用一个旧的工具和连接到这个工具的数据库在很久以前。我是新手,需要一些帮助来理解这一点。我需要帮助编写我尝试过的代码,并且每次都出错。存储过程更新问题
public void UpdateUser(string NewUser, string OldUser)
{
using (SqlConnection con = HSDatabaseConnection())
{
using (SqlCommand cmd = new SqlCommand("UpdateNames", con))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("@LogonName", System.Data.SqlDbType.VarChar).Value = NewUser;
cmd.Parameters.Add("@OldLogonName", System.Data.SqlDbType.VarChar).Value = OldUser;
cmd.ExecuteNonQuery();
}
con.Close();
}
}
我有4个表,每个表的唯一共同点就是列名“AN”。我需要更新“AN”如果代理人有改变名称合法
到目前为止,我想出了这个过程
USE [HSDB]
GO
/****** Object: StoredProcedure [dbo].[UpdateNames] Script Date: 9/16/2016 12:32:33 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[UpdateNames]
--Add the parameters for the stored procedure here
@AN varchar(MAX)
AS
BEGIN
--SET NOCOUNT ON added to prevent extra result sets from
--interfering with SELECT statements.
SET NOCOUNT ON;
--Insert statements for procedure here
UPDATE Att
SET AN = @AN
WHERE (AN = @AN)
UPDATE MS
SET AN = @AN
WHERE (AN = @AN)
UPDATE Lost
SET AN = @AN
WHERE (AN = @AN)
UPDATE WeeklyCharges
SET AN = @AN
WHERE (AN = @AN)
END
有人能告诉我什么,我做错了。谢谢
'SET AN = @AN WHERE AN = @ AN'。这是无所事事。您将其设置为相同的值。 – Eric
你真的需要varchar(max)吗?当然你的登录名字少于8,000个字符。 –
但我很好奇。为什么你在没有数据库时试图修复一些代码?您是否试图从应用程序代码中反向设计数据库?这似乎很有可能几乎不可能做到。严格地将全名存储在多个表中是非常糟糕的。它应该被标准化为一个单一的入口点。 –