问题标签 [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.
.net - 用于从 ASP .NET 更新表的动态 SQL
我有一个 ASP.NET 3.5 应用程序,我希望允许用户选择一个表并允许对该表进行 CRUD 操作。用户将被限制在多个表中进行编辑,但是这些表甚至数据库在部署之后才会被知道;web.config 将设置连接和表。
所以我需要构建一个允许更新 SQL 数据库中的通用表的框架。我见过的大多数 ORM 都需要在编译时知道架构,所以我不能使用这些。最好的答案似乎是动态构建 SQL 查询字符串并使用 reg 表达式来确保有效输入并防止 SQL 注入。有没有更好的办法?
sql - 有没有办法从变量中选择数据库?
有没有办法从变量中选择数据库?
sql-server - 当列名是变量时,从 INSERT 动态查找触发器中的列值
我有一个触发器,可以插入和更新视图。我需要找到正在修改的列并将值放入正确的表中。
我试图弄清楚如何在我的触发器中获取 ID 和 [% Num] 列的值。问题是在插入或更新中可以设置 32 个不同的列,所以我想循环查看该列是否在“插入”表中。
一个问题是,如果我使用 exec 或 execute 来构建动态查询,则 insert 不在此范围内。
该视图是动态的,因为如果添加了属性,则该视图将由存储过程重新生成,因此我不能假设在任何给定时间视图中有哪些列名,它可以增长和缩小。
理想情况下我想做SET @Value = (SELECT i.[@Name] FROM inserted i)
但是@Name不是列名,而是触发器中的一个变量,所以当我尝试
这不起作用,因为插入的似乎不在范围内。
对于第一个循环 @Name = 'ID' 和第二个循环将是 'Col2' 没有插入,所以 @Value 的值应该为空,我继续循环遍历可能的列名,直到我完成,并且触发器被处理。
我称它为触发器,它被定义为:
我目前正在使用 INSERT 命令进行测试。我意识到在进行更新时我可能需要查看“已删除”表。
更新:我假设目前只插入一行,用于我的测试,看看如何让它工作。这是一个实体-属性-值数据库,但我有一个使它看起来有关系的视图。使用集成服务时,更新正在进行时,对视图的任何插入或更新都会调用触发器。我只是想了解如何获取我需要的信息,以便我可以使用正确的值更新正确的表。
tsql - 存储过程可以在“IN”子句中使用动态参数吗?
我想运行这样的查询:
但传递给 IN 子句的Id数量仅在运行时确定。
我必须使用动态 SQL 还是可以使用存储过程来完成?
更新: 如果有任何一个选项可用,哪个更好?
谢谢。
performance - 当列名和表名都传入时,如何运行查询?
给定一对变量中的表名和列名,我可以在不使用动态 sql 的情况下执行选择查询吗?
例如,我想要比这更好的东西:
我想这样做是因为我的动态 sql 版本比非动态版本慢 3 倍(它不支持可编程的表/列名,因此这个问题)。
oracle - Oracle EXECUTE IMMEDIATE 可以绑定可变数量吗?
我需要在 Oracle 上使用动态 SQL 执行,我不知道运行前 SQL 中使用的绑定变量的确切数量。
有没有办法在调用中以某种方式使用可变数量的绑定变量EXECUTE IMMEDIATE
?
更具体地说,我需要将一个参数传递给未知的 SQL,但我不知道它在那里使用的频率。
我尝试了类似的东西
但它与ORA-01008: not all variables bound.
stored-procedures - EXECUTE IMMEDIATE 与 USING 子句给出错误
全部,
一般来说,我对存储过程很陌生,但我特别在 Oracle 中苦苦挣扎。我已经创建了一个非常简单的示例来说明我要完成的工作,但这个简化版本仍然出现同样的错误。
示例存储过程如下:
当我使用 调用上述存储过程CALL ashish_test()
时,我得到:
错误消息 http://web1.twitpic.com/img/12831839-06a3ea536df5d5a0a839eb83d9e59d25.4a3936b8-scaled.jpg
根据这篇文章(查看示例 7-1),USING
关键字应将其中的编号占位符 ( :1
)替换为v_strSQL
存储在 中的值v_tab
。但是,我不断收到无效表错误。我猜这是因为由于EXECUTE IMMEDIATE
某种原因无法用值替换占位符,但我不确定为什么会这样。有谁知道我是否在这里做一些愚蠢的事情?
我在 Oracle 10g 数据库上运行它并使用 PL/SQL Developer。
sql-server - 替代执行动态 sql
我目前有一个对应于业务对象的“过滤器”对象。此对象具有与我希望能够过滤/搜索此类业务对象列表的不同方式相关的属性。目前,这些过滤器对象有一个方法,该方法构建 where 子句的内容,然后将其传递到 SQL Server 2000 存储过程,在该存储过程中与选择查询的其余部分连接。然后使用Exec执行最终字符串。
目前这工作正常,除了我担心缺乏执行计划缓存的性能问题。在一些研究中,我看到了调用sp_executesql的用法;这是一个更好的解决方案还是对我正在做的事情有更好的约定?
更新:我认为使用 sp_executesql 的部分问题是基于我的过滤器中的一个集合,我需要生成一个 OR 语句列表。我不确定“参数化”查询是否是我的解决方案。
例子
sql - T-SQL:如何在动态 SQL 中使用参数?
我有以下动态查询,它在没有WHERE
预期的子句的情况下工作正常UNIQUEIDENTIFIER
。
当我传递它时,我没有得到结果。我试过CAST
and CONVERT
,但没有结果。我可能做错了,有人可以帮忙吗?
sql-server - 带有变量的sql使用语句
我正在尝试使用 SQL 语句切换当前数据库。我尝试了以下方法,但所有尝试都失败了:
- 使用 @DatabaseName
- EXEC sp_sqlexec @Sql -- 其中@Sql = 'USE [' + @DatabaseName + ']'
添加更多细节。
编辑:我想在两个单独的数据库上执行几件事,其中两个都配置了一个变量。像这样的东西: