问题标签 [dynamic-sql]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 用于列的 Oracle 动态 SQL
我正在编写一个存储过程,我需要根据所报告的数据填充一个表。
在这种情况下,我将每天为某个日期范围内的某个代码提取三个值。
假设在此存储过程的某个运行中,我有一个日期范围的代码值 X、Y 和 Z,如下所示:
因此,对于日期范围内的每一天,我都有代码 x、y 和 z 的三个记录。
在我的最终表格中,我需要将其从行转换为列。通常我会使用解码功能,但在这里我想根据返回的数据动态创建我的最终表格。
在这种情况下,我将在该范围内的每一天都有一条记录,并且还有 9 列(val_1_X、val_2_x、val_3_x、val_1_y 等等)。
我想动态设置它,以便在引入新的“代码”时不需要重新打开我的存储过程,这样在报告的每个实例上,只有在该实例上返回的“代码”该报告被列入决赛桌。
这可以通过动态sql实现吗?我在 Oracle 版本 10g 上。
oracle - 如何在 sqlplus 中调试 Oracle 动态 sql?
我有一个EXECUTE IMMEDIATE
用于执行查询的 PL/SQL 语句。但是,我很难弄清楚如何获取正在执行的查询的文本。我不能使用dbms_output
,因为查询大于 255 个字符。有没有办法让 sqlplus 回显传入的字符串EXECUTE IMMEDIATE
?
oracle - PL/SQL - where 子句中的可选条件 - 没有动态 sql?
我有一个查询,并非所有条件都是必需的。以下是使用所有条件时的外观示例:
标记为--this is variable
的部分是不同的部分!如果未指定条件,则没有默认值。例如,如果输入为 q.type 指定“*”(但保持其他所有内容相同),则查询应匹配所有类型,并执行如下:
我知道可以使用动态 sql 即时构建此查询,但我想知道这可能会导致什么样的性能问题,以及是否有更好的方法来做到这一点。
sql-server - 当数据中不存在时,SQL Server 动态数据透视返回空值
我有 3 个表(tblPreference
, tblCustomer
, tblCustomerPreference
),如下所示:
我正在创建此数据的数据透视,因此使用以下存储过程将其全部放在一行中,以便它始终拉回所有首选项,如果找到客户特定值,它将返回,否则返回默认值:
我遇到的问题是,当我查询 CustomerID 1 或 2 时,一切都按预期返回,所有值都按预期填充。但是,如果我查询 CustomerID 3,它将返回一个NULL
为其他客户填充的任何 PreferenceID。如果我在没有PIVOT
表达式的情况下运行查询,它将返回所有按预期填充的首选项。只有当我 PIVOT 数据时,数据才会NULL
蔓延。我希望我错过了一些简单的事情,但我没有看到错误。
tsql - 如何在动态 Sql 中添加变量,而不是连接它们?
我有以下动态 sql 语句,我想在其中添加 @StartRowIndex + @MaximumRows 并从中减去 1。我不清楚在声明中将单引号放在哪里。这里是:
sql - 使用 SQL_VARIANT 数据类型参数化动态 SQL 问题
我一直在重构一个巨大的动态 SQL 语句,并且认为我可能遇到了障碍。目标是对其进行参数化。我正在使用 SQL Server 2005。
我有一个 int 变量 ( @i
),它决定了我需要更新的列。这是我一直在做的事情:
然后,我尝试执行我的语句:
这导致:
不允许从数据类型 sql_variant 到 varchar 的隐式转换。使用 CONVERT 函数运行此查询。
如果我能以某种方式@updateValue
转换为正确的类型,我可以解决这个问题,我将其作为文本存储在@updateClauseDataType
. 有没有什么办法可以做到这一点,而无需一个巨大的 if 语句来询问 的值@updateClauseDataType
?
sql - 无法在动态 SQL 中使用完全限定的表名
我正在尝试通过迭代服务器名称列表并执行一些动态 SQL 来更新多个远程服务器上的表。见下文。
产生以下输出:
现在 SomeServer 是一个链接服务器。如果我执行打印出来的 SQL 语句,它工作正常。另请注意,在错误消息中,它认为远程服务器是“UPDATE SomeServer”,而不是“SomeServer”。
sql - 通过链接服务器一起执行多个动态语句
我需要在链接服务器(SQL Server 2005)上同步执行三个动态 SQL 语句,如下所示:
为了测试这一点,我有一个链接到自身的链接服务器设置。
当执行这个本地(通过删除@server_name
)时,使用 SQL Profiler 我看到它作为一个语句执行得很好。但是,当我通过链接服务器(使用@server_name
变量)执行此操作时,我在 SQL Profiler 中看到每个语句都单独执行,并在每个语句sp_reset_connection
之后执行。
跟踪看起来像这样:
这给我带来了问题。为什么我可以指定 SQL Serversp_reset_connection
在语句之间不调用?
sql - 我可以在 SQL Server / TSQL 中回滚动态 SQL
我可以在事务中运行动态 sql 并使用 EXEC 回滚:
将其放入事务中并在 exec 语句后使用 @@error 进行回滚。
例如。代码
如果有 n 条动态 sql 语句并且在 n/2 中发生错误,将回滚前 1 到 ((n/2) - 1) 条语句
关于第一个答案的问题
@@Error 最有可能不会拾取错误这意味着它可能不会拾取错误,这意味着事务可能会提交?这违背了目的
SQL Server 2005+ 中的 TRY/CATCH 是的,我正在使用 SQL Server 2005,但之前没有使用过 Try Catch
或者我在网上看了一些更多的例子
sql - 关于存储过程中的情况
我有以下查询。
这里的问题是我想在@WhrStr 中获得第一个和第二个 case 语句的结果。但是 WhrStr 中的值是'e.SpecializationId 为空或 e.SpecializationId 不为空'意味着第一个被第二个覆盖。无论如何将第二个附加到第一个。