标签: procedure-definition

如何比较大型存储过程?

我想通过检索和比较来自 sys.sql_modules 的定义来比较在几个不同数据库中应该相同的存储过程。

目前我正在考虑“相同”的程序,除了一个或其他副本在开始或结束时有空行或其他空格。这些似乎是通过制作程序脚本来添加的。我想删除空行等并比较剩下的内容。所以我可以这样做:

IF ( LEFT(@definition1, 2) = NCHAR(13) + NCHAR(10) )
    SET @definition1 = SUBSTRING(@definition1, 3, 1048576)
Run Code Online (Sandbox Code Playgroud)

如果过程的长度小于 1048576 字节,这将起作用。但是长度的实际限制是多少——如果有的话?

我想实际上我应该问:比较程序的好方法是什么?(除了“从 Red Gate 购买 SQL 比较实用程序”。)

更新

(修订)我刚刚意识到 sys.sql_modules.definition 具有数据类型 nvarchar(max) 并且具有指定的长度......以字节为单位,POWER(2, 31)-1,除了该公式不起作用;- ) 在 nchar 字符中,不超过 POWER(2, 30)-1。

所以这应该这样做:

IF ( LEFT(@definition1, 2) = NCHAR(13) + NCHAR(10) )
    SET @definition1 = SUBSTRING(@definition1, 3, 2147483647)
Run Code Online (Sandbox Code Playgroud)

是的,那是 2^31-1,它应该是 2^30-1,但只要它大于 @definition1 是或可以是,我就可以逃脱。直到他们将“max”增加到 2^63-1 字节。在有“最大”之前,我使用了 8000。

也许我应该包括仔细检查 DATALENGTH() 以防它意外地被截断到某处的前 8000 个字节。

至于你关于良好的代码管理首先不需要这种需求的明智之言 - 有用的弹药,谢谢你(现在从我自己的隐藏中提取子弹)。我认识到有条不紊的工作实践的价值,即使它们也适用于我。但问题在于管理层,假设他们只是想要一份报告或结果 - 现在 - 并且多年来一直在获得和期待这样的服务 - 现在他们已经学会称之为“敏捷”。

schema sql-server procedure-definition

5
推荐指数
2
解决办法
2071
查看次数

ORM 风格的服务器端编程语言(PL/SQL 的 OO 替代品?)

晚上好,

是否有面向对象的 PL/SQL 替代品,允许编写服务器端过程[然后称为客户端或服务器端]?

(适用于 MySQL、PostgreSQL、Oracle 等)

stored-procedures plsql scripting procedure-definition

1
推荐指数
1
解决办法
459
查看次数

创建过程时出现“用户拒绝访问”错误

当我请求我的数据库服务器 (MySQL) 时,使用 "show grants for current_user"

我注意到我有权执行程序:

SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES, EXECUTE 
Run Code Online (Sandbox Code Playgroud)

但是当我执行包含这些指令的 sql 文件时:

DROP FUNCTION IF EXISTS 
DROP FUNCTION IF EXISTS 
DROP PROCEDURE IF EXISTS
CREATE FUNCTION 
CREATE PROCEDURE
DECLARE
CALL
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

ERROR 1044 (42000) at line 16: Access denied for user
Run Code Online (Sandbox Code Playgroud)

第 16 行包含: CREATE FUNCTION function_name( .. )

我应该有其他补助金吗?

mysql stored-procedures permissions procedure-definition

1
推荐指数
1
解决办法
7088
查看次数