sql - 使用 SCOPE_IDENTITY 的 OUTPUT 参数 insetad 的问题
问题描述
我正在尝试使用OUTPUT
param 而不是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
我想做出改变。
解决方案
基于将 OUTPUT INTO 与简单的 INSERT 语句一起使用,您可以遵循以下模式:
INSERT INTO TableName(..,..)
OUTPUT INSERTED...
VALUES (.., .., ..)
因此,在您的情况下,这应该有效(假设您的身份列是ID
):
string finalQuery = "Insert Into " + dataRow.Table.TableName + "(" + sqlBuilder1.ToString() + ")" + " OUTPUT INSERTED.ID "+ " values(" + sqlBuilder2.ToString() + ");";
推荐阅读
- javascript - ESRI Maps 设置 MapView.extent 截断显示范围的顶部和底部
- javascript - Javascript - 撤消按钮以删除添加的元素
- ios - 意外的双重函数调用
- sql - oracle SQL Developer 显示数字数据类型为空,而 Length 函数显示 ORA-01722:无效数字
- ios - 如何在 UITableView 中使用 IBDesignable 类
- javascript - 在悬停时打开 Bootstrap 下拉菜单
- javascript - 在 JavaScript 的过滤器中应用过滤器
- python - 需要登录时如何使用 urllib 的 urlopen 保存文件?
- java - JavaFX 打印 1920x1080 屏幕尺寸为 24"by18"
- ios - 在 Swift Playground 中导入使用 Firebase 的框架(“缺少必需的模块‘Firebase’”)