在SQL Server 2005中的Insert语句中使用SubQuery

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)

有什么解决方案吗?

Asa*_*aph 8

两件事,首先,尝试这个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以线程安全的方式给你正确的.


Dav*_*vid 5

将您的SQL更改为:

Insert into Carfeature (RecID,FeatureID)
select Max(RecID), @FeatureID from record
Run Code Online (Sandbox Code Playgroud)