Questions tagged «prepared-statement»


3
如何在MySQL存储过程中使用准备好的语句?
我正在使用mysql,我需要以某种方式在以后的查询中使用由prepared语句返回的curid列。我使用准备好的语句,因为如我所读,这是将变量传递给LIMIT子句的唯一方法。我在这里有此存储过程: DROP PROCEDURE IF EXISTS fixbalance; CREATE PROCEDURE fixbalance (userid INT) BEGIN DECLARE i INT DEFAULT 0; DECLARE balance INT DEFAULT 0; DECLARE idcnt INT; SET idcnt = (SELECT COALESCE(COUNT(id), 0) FROM coupon_operations WHERE user_id = userid); IF idcnt <> 0 THEN WHILE i <= idcnt DO BEGIN SET @iter …

2
使用SqlCommand.Prepare()有什么意义和好处?
我遇到了开发人员代码,其中在执行SQL查询之前广泛使用了SqlCommand.Prepare()(请参见MSDN)方法。我想知道这样做的好处是什么? 样品: command.Prepare(); command.ExecuteNonQuery(); //... command.Parameters[0].Value = 20; command.ExecuteNonQuery(); 我玩了一些,并进行了追踪。调用Prepare()方法后,Command的执行使Sql Server执行以下语句: declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'@id int,@desc text',N'INSERT INTO dbo.testtable (id) VALUES (@id)',@id=20' select @p1 之后,当获取参数的值并SqlCommand.ExecuteNonQuery()调用该参数时,将在Sql-Server上执行以下操作: exec sp_execute 1,@id=20 对我来说,这看起来像该语句在Prepare()执行后立即得到了编译。我想知道这样做有什么好处?这是否意味着将其放入计划缓存中,并且可以在使用所需参数值执行最终查询后立即重新使用它? 我发现(并记录在另一个问题中)用SqlParameters执行的SqlCommands总是包装在sp_executesql过程调用中。这使Sql Server能够独立于参数值存储和重用计划。 关于这一点,我想知道该prepare()方法是无用的还是过时的,或者我是否在这里遗漏了什么?

1
带有IN()参数的PostgreSQL PREPARE查询
我正在尝试从PHP准备查询,例如: pg_prepare($con, "prep", "select * from test where tid in ($1)"); 然后执行以下命令: $strpar = "3,4,6,8,10"; pg_execute($con, "prep", array($strpars)); 问题是我无法传递由于prepare需要固定数量的参数而构建的一系列值。有什么方法可以使参数动态化?

3
如何在InnoDB引擎中使用插入延迟,并减少插入语句的连接?
我正在开发一个涉及大量数据库写入,大约70%插入和30%读取的应用程序。这个比率还将包括我认为是一次读取和一次写入的更新。通过插入语句,多个客户端通过以下插入语句将数据插入数据库: $mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)"); 问题是我应该使用insert_delay还是使用mysqli_multi_query机制,因为insert语句使用服务器上的〜100%cpu。我在数据库上使用InnoDB引擎,因此无法进行延迟插入。在服务器上的插入速度为〜36k / hr,读取率为99.89%,我也使用select语句在单个查询中检索了7次数据,该查询在服务器上执行需要150秒。我可以使用哪种技术或机制执行此任务?我的服务器内存为2 GB,我应该扩展内存吗?看看这个问题,任何建议都会感激我。 表的结构: +-----------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user | …

1
sp_prepexec(sp_execute)与sp_executeSQL
问题的实质:实际的存储过程是实现临时表缓存的唯一机制,还是sp_executeSQL/ 等系统存储过程sp_execute也利用了它们? 我不是DBA,所以请少说话。我们的应用程序发送了准备好的语句,这些语句从探查器中运行,我看到它运行所有SQL,sp_prepexec这是同时运行sp_prepare和的系统过程sp_execute。我要尝试做的是弄清楚我是否从临时表缓存中受益。 我一直在使用带有object_id()的本指南来检查行为 https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html 然后,此博客文章上的第3点表明EXEC无法使用临时表缓存,但忽略了sp_executeSQL是否可以:http : //blogs.msdn.com/b/turgays/archive/2013/09/18/exec-vs- sp-executesql.aspx 在通过客户端发送的查询中,我创建了一个简单的临时表。 DECLARE @foo int; -- set by JDBC, unused but required to force a prepared statement SELECT 1 AS id INTO #tmp SELECT OBJECT_ID('tempdb..#tmp'); 在探查器中,我可以看到: declare @p1 int set @p1=NULL exec sp_prepexec @p1 output,N'@P1 int',N'declare @foo INT = @P1 SELECT 1 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.