我有两个表(UserTable和UserProfile)和结构:
create table userTable(
id_user int identity(1,1) primary key ,
Name varchar(300) not null ,
Email varchar(500) not null ,
PasswordUser varchar(700) not null,
userType int ,
constraint usertype_fk foreign key(userType) REFERENCES userType(id_type)
on delete set null
)
和userPtrofile:
create table UserProfile(
id_profile int identity(1,1) primary key ,
ClientCmpName varchar(300) null,
Clientaddress varchar(500) null,
phone varchar(50) null,
descriptionClient varchar(400) null,
img image null,
messageClient text ,
fk_user int ,
constraint fkuser foreign key(fk_user) references userTable(id_user)
on delete cascade
)
我正在使用SQL Server 2008.问题是当我更新记录时执行加载而不执行此操作是示例查询:
update UserProfile set messageClient=N'010383772' where fk_user=2;
截图
5 回答
如果您担心此查询的性能:
那么索引将非常有用:
这应该使查询几乎是即时的 .
注意:索引可以减慢插入和其他操作 . 这通常不是一个大问题,并且在外键列上有索引很常见 .
愚蠢的问题,你为什么要尝试根据
[userType]
值进行更新?你不想根据它的ID(这是一个主键,在一个特定的
[UserProfile]
上更新这个值,所以会更快)也许性能问题是由于您的UPDATE尝试使用此特定
UserType
值更新所有[UserProfile]
记录...?或者我错过了你想要做的事情(以及你试图更新的记录数) .
也许你已经在另一个进程(可能是另一个查询编辑器页面)上的表上启动了一个事务(BEGIN TRANSACTION),直到你没有停止该事务,该表将无法用于更新 . 检查变量select @@ trancount,或尝试回滚已经进行的更新(ROLLBACK TRANSACTION) . 还要检查是否可以更新其他表而不会出现问题 .
查询是否曾执行过?这似乎是一个僵局 . 你应该通过某种程序open the activity monoitor和check if your query is blocked .
在这种情况下,您应该终止阻止查询 .
谢谢你试图帮助我解决问题我的问题是另一个查询编辑器页面,因为我使用asp.net和另一个页面我使用相同的记录来更新相同的记录,当我停止asp.net项目然后查询成功