Meh*_*eli 0 sql t-sql sql-server sql-server-2005
我有一个carale项目.它完全适用于localhost.我有一个"AddCar.aspx"页面,可以插入带有汽车功能的汽车记录.通过复选框选择汽车功能.如果我没有选中任何复选框,则没有问题.但如果我选中其中一个功能复选框,我的页面会出现如下错误:
"在此上下文中不允许使用子查询.只允许使用标量表达式."
我的代码是这样的:
foreach (DataListItem item in Security1.Items) {
CheckBox CheckBox1 = (CheckBox)item.FindControl("CheckBox1");
if (CheckBox1.Checked) {
HiddenField h = (HiddenField)item.FindControl("FeaID");
string add = "Insert into Carfeature (RecID,FeatureID) values ((select Max(RecID) from record),@FeatureID)";
cmd[k] = new SqlCommand();
cmd[k].CommandType = CommandType.Text;
cmd[k].Parameters.Add("@FeatureID", SqlDbType.Int).Value = h.Value;
cmd[k].CommandText = add;
k++;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么解决方案吗?
两件事,首先,尝试这个SQL:
Insert into Carfeature (RecID,FeatureID)
select Max(RecID), @FeatureID from record;
Run Code Online (Sandbox Code Playgroud)
其次,Max(RecId)
如果您有多个线程执行此操作,则会出现问题.你知道你可以获得最后插入的身份吗?这不是你想要做的吗?如果您刚刚record
在上一步中将记录插入表中
select SCOPE_IDENTITY() as RecID;
Run Code Online (Sandbox Code Playgroud)
会RecID
以线程安全的方式给你正确的.
将您的SQL更改为:
Insert into Carfeature (RecID,FeatureID)
select Max(RecID), @FeatureID from record
Run Code Online (Sandbox Code Playgroud)