c++ - ODBC : Array of Parameters - ignoring parameter

标签 c++ c sql-server sql-server-2008 odbc

在使用参数数组进行插入/更新期间,可以忽略一个/一些特定行的一个/一些参数。

我提供了一个简单的例子。想象一下,我们有一个包含 3 列的表:X、Y 和 Z。我们想在 block 中执行更新(如果缺少某些参数,请忽略,与讨论无关):

#define N_ROWS_PER_BLOCK 100
int h_x[N_ROWS_PER_BLOCK];
int h_y[N_ROWS_PER_BLOCK];
int h_z[N_ROWS_PER_BLOCK];

// Fill h_x, h_y and h_z with the values that we want - doesn't matter to this question
// (...)
strexec = "UPDATE table SET X = ?, Y = ?, Z = ?"

SQLBindParameter(stmt_handle, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, h_x, 0, NULL);
SQLBindParameter(stmt_handle, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, h_y, 0, NULL);
SQLBindParameter(stmt_handle, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, h_z, 0, NULL);

SQLSetStmtAttr(stmt_handle, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)N_ROWS_PER_BLOCK, 0);
SQLExecDirectA ( stmt_handle, (SQLCHAR*)strexec , SQL_NTS );

问题:现在想象一下,出于某种原因,我们希望第 60 行中的参数 X 在语句执行中被忽略。这样做的好处是我们可以准备一个包含“所有列/属性”的语句,并且只更新每行中我们想要的属性/列。

如果可能,我该怎么做?我可以指出一些(虚拟的)例子吗?

我阅读了 ODBC 文档 i 并且知道可以使用 SQL_ATTR_PARAM_OPERATION_PTR 属性并设置 SQL_PARAM_PROCEED 或 SQL_PARAM_IGNORED 来忽略(完整)行(一组参数),但我不这样做想要忽略该行的所有属性仅该行的一个参数

编辑:

我在 IBM ODBC 文档(扩展指标)中找到了这个:

“ODBC 应用程序可以使用扩展指示器来更新 UPDATE、INSERT 和 MERGE 语句中的所有列,而无需指定不需要更改的列的当前值。

如果您使用扩展指标,则无需为要插入的每个列组合编写单独的 INSERT 语句"

SQL_UNASSIGNED:“UPDATE 和 MERGE UPDATE 操作忽略绑定(bind)参数的目标列。参数的处理方式与 INSERT 和 MERGE INSERT 操作的 DEFAULT 关键字相同。”

Native Client 可以吗?在 Microsoft 文档中没有出现任何对 SQL_UNASSIGNED 的引用。

提前致谢。

最佳答案

您可以创建和准备 2 个语句:

strexec1 = "UPDATE table SET X = ?, Y = ?, Z = ?";
strexec2 = "UPDATE table SET Y = ?, Z = ?"

然后选择要批量执行的语句就可以了

关于c++ - ODBC : Array of Parameters - ignoring parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14377859/

相关文章:

c++ - 在 C++ 中构建管理,在 Linux 上构建良好的 IDE

c++ - 无法在窗口中加载 PDF

c - Node 和C应用程序之间的进程间通信

c++ - 有没有什么好的 C/C++ 开源 BDD 工具?

sql - 验证 SQL Server 中表中的字符串 - CLR 函数或 T-SQL(已更新问题)

c++ - C语言监控Windows操作系统进程

arrays - 内存 malloc 在 C 中如何工作?//我的代码有什么问题?

SQL Server 根据两个表中的组合键自动删除 FK 记录?

sql - 以两种不同的方式汇总数据

c++ - 退出函数后 vector 大小变为 0