【问题标题】:problem using OUTPUT parameter insetad of SCOPE_IDENTITY使用 OUTPUT 参数而不是 SCOPE_IDENTITY 的问题
【发布时间】:2020-11-29 18:17:57
【问题描述】:

我试图在查询中使用OUTPUT 参数而不是SCOPE_IDENTITY。我浏览了一些资源,但不明白如何使用它。 例如,我正在添加我现有的代码。

protected string Test(DataRow dataRow, out QueryParamList paramList)
    {
        paramList = new QueryParamList();

        StringBuilder sqlBuilder1 = new StringBuilder();
        StringBuilder sqlBuilder2 = new StringBuilder();

        for (int i = 0; i < dataRow.ItemArray.Length; i++)
        {
            if (!IsPrimaryKey(dataRow, i))
            {
                if (dataRow.ItemArray[i] != DBNull.Value)
                {
                    sqlBuilder1.Append(dataRow.Table.Columns[i].Caption + ",");
                    sqlBuilder2.Append("@" + dataRow.Table.Columns[i].Caption + ",");
                    DbType dbType = (DbType)Enum.Parse(typeof(DbType), dataRow.Table.Columns[i].DataType.Name);
                    paramList.Add(new QueryParamObj() { ParamName = dataRow.Table.Columns[i].Caption, ParamValue = dataRow.ItemArray[i], DBType = dbType });
                }
            }
        }
        if (sqlBuilder1.Length > 0) sqlBuilder1.Remove(sqlBuilder1.Length - 1, 1);
        if (sqlBuilder2.Length > 0) sqlBuilder2.Remove(sqlBuilder2.Length - 1, 1);

        string finalQuery = "Insert Into " + dataRow.Table.TableName + "(" + sqlBuilder1.ToString() + ")" + " values(" + sqlBuilder2.ToString() + ");select SCOPE_IDENTITY()";


        return finalQuery;
    }

finalQuery这里我想做出改变。

【问题讨论】:

    标签: sql asp.net tsql webforms ado.net


    【解决方案1】:

    基于Using OUTPUT INTO with a simple INSERT statement,您可以遵循以下模式:

    INSERT INTO TableName(..,..)
    OUTPUT INSERTED...
    VALUES (.., .., ..)
    

    因此,在您的情况下,这应该有效(假设您的身份列是 ID):

    string finalQuery = "Insert Into " + dataRow.Table.TableName + "(" + sqlBuilder1.ToString() + ")" + " OUTPUT INSERTED.ID "+ " values(" + sqlBuilder2.ToString() + ");";
    

    另见IDENTITY, SCOPE_IDENTITY(), OUTPUT and other methods of retrieving last identity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多