我想用C#parsingSQL代码。 具体来说,有没有免费的parsing器可以parsingSQL代码,并生成一个树或任何其他结构呢? 它也应该为嵌套结构生成适当的树。 它也应该返回这棵树的节点所代表的那种语句。 例如,如果节点包含一个循环条件,那么它应该返回,这是一个节点的“循环types”。 或者有什么办法可以parsingC#中的代码并生成一个我想要的types的树?
我一直在迁移一些MySQL查询到PostgreSQL来使用Heroku。 我的大部分查询都能正常工作,但是当我使用group时,我仍然遇到类似的重复性错误: 错误:列“XYZ”必须出现在GROUP BY子句中或用于聚合函数中 有人能告诉我我做错了什么吗? MySQL的工作100%: SELECT `availables`.* FROM `availables` INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24') GROUP BY availables.bookdate ORDER BY availables.updated_at PostgreSQL错误: ActiveRecord :: StatementInvalid:PGError:错误:列“availables.id”必须出现在GROUP BY子句中或用于聚合函数中: SELECT“availables”。* FROM“availables”INNER JOIN“rooms”ON“rooms”.id =“availables”.room_id WHERE(rooms.hotel_id = 5056 AND availables.bookdate BETWEEN E'2009-10-21'AND E' 2009-10-23')GROUP BY availables.bookdate ORDER BY […]
我在做网站和应用程序不是任务关键 – 例如。 银行软件,太空飞行,重症监护应用程序等等。你明白了。 那么,在这个庞大的免责声明中,在某些Sql语句中使用NOLOCK提示是不是很糟糕? 几年前,一位Sqlpipe理员build议,如果我对“脏读”感到满意,那么我应该使用NOLOCK,这将使我的系统性能提高一倍,因为每次读取都不会locking表/行/不pipe。 我也被告知,如果我遇到死锁,这是一个很好的解决scheme。 所以,我开始思考了几年,直到一个Sql guru帮我一些随机代码,并注意到我的sql代码中的所有NOLOCKS。 我被礼貌地骂了,他试图向我解释(为什么这不是一件好事),我有点失落。 我觉得他的解释的本质是“这是一个更严重的问题的创可贴解决scheme,特别是如果你遇到了僵局。 因此,解决问题的根源“。 我最近做了一些Googlesearch,碰到这个post 。 那么,可以一些sql db guru sensei的请赐教吗?
如果我有一个插入语句,如: INSERT INTO MyTable ( Name, Address, PhoneNo ) VALUES ( 'Yatrix', '1234 Address Stuff', '1112223333' ) 如何使用OUTPUT子句将@var INT设置为新行的标识值(称为Id )? 例如,我已经看到了将INSERTED.Name放入表variables的示例,但是我无法将它变成非表variables。 我试过OUPUT INSERTED.Id AS @var , SET @var = INSERTED.Id ,但都没有工作。 提前致谢。
所有,我有一个大的(不可避免的)dynamicSQL查询。 由于select标准中的字段数量,包含dynamicSQL的string正在增长超过4000个字符。 现在我明白NVARCHAR(MAX)有一个最大值为4000的设置,但是在Server Profiler中查看执行的SQL DELARE @SQL NVARCHAR(MAX); SET @SQL = 'SomeMassiveString > 4000 chars…'; EXEC(@SQL); GO 似乎工作(!?),另一个查询也很大,它会抛出一个错误,这是4000的限制(!?),它基本上修剪所有的SQL后4000限制,留下一个语法错误。 尽pipe在剖析器中,它完全显示了这个dynamicSQL查询(!?)。 到底发生了什么,我应该只是将这个@SQLvariables转换为VARCHAR并继续使用它? 谢谢你的时间。 PS。 能够打印超过4000个字符来查看这些大问题也是很好的。 以下限制为4000 SELECT CONVERT(XML, @SQL); PRINT(@SQL); 还有没有其他酷的方式?
MySQL有这样的东西: INSERT INTO visits (ip, hits) VALUES ('127.0.0.1', 1) ON DUPLICATE KEY UPDATE hits = hits + 1; 据我所知这个function在SQLite中不存在,我想知道的是,如果有任何方法来归档相同的效果,而不必执行两个查询。 另外,如果这是不可能的,你更喜欢什么: SELECT +(INSERT或UPDATE)或 更新(+ INSERT 如果更新失败 )
无视performance,我会得到相同的结果从查询A和B下面? C和D怎么样? — A select * from a left join b on <blahblah> left join c on <blahblan> — B select * from a left join c on <blahblah> left join b on <blahblan> — C select * from a join b on <blahblah> join c on <blahblan> — D select * from a join […]
我正在运行使用1000个INSERT语句之间的性能比较: INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) VALUES ('6f3f7257-a3d8-4a78-b2e1-c9b767cfe1c1', 'First 0', 'Last 0', 0) INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) VALUES ('32023304-2e55-4768-8e52-1ba589b82c8b', 'First 1', 'Last 1', 1) … INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) VALUES ('f34d95a7-90b1-4558-be10-6ceacd53e4c4', 'First 999', 'Last 999', 999) ..versus使用1000个值的单个INSERT语句: INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) VALUES ('db72b358-e9b5-4101-8d11-7d7ea3a0ae7d', 'First […]
我没有看到有关这个主题的任何类似的问题,我不得不研究这个我正在做的事情。 以为我会张贴答案,以防其他人有相同的问题。
假设我有loggingID 3,4,7,9,我希望能够通过导航通过下一个/上一个链接从一个到另一个。 问题是,我不知道如何获取最近ID较高的logging。 所以当我有一个ID 4的logging,我需要能够获取下一个现有的logging,这将是7.该查询可能看起来像 SELECT * FROM foo WHERE id = 4 OFFSET 1 我怎样才能获取下一个/上一个logging,而无需获取整个结果集和手动迭代? 我正在使用MySQL 5。