Tsql 我可以创建一个包含无效用户定义函数名的存储库
我只是注意到我可以用拼写错误的用户定义函数修改存储过程代码 我注意到在第一次执行SP时 当SP中包含无效的用户定义函数名时,有没有办法获得编译错误?在编译时?没有 但是,您可以在部署之后使用一些SQL依赖项对象(如果使用MS SQL)来查找问题,或者作为beta测试的一部分。根据SQL Server的版本,Aaron Bertran对选项进行了非常好的汇总 下面是一个使用SQLServer2008sys对象的示例,名为Tsql 我可以创建一个包含无效用户定义函数名的存储库,tsql,Tsql,我只是注意到我可以用拼写错误的用户定义函数修改存储过程代码 我注意到在第一次执行SP时 当SP中包含无效的用户定义函数名时,有没有办法获得编译错误?在编译时?没有 但是,您可以在部署之后使用一些SQL依赖项对象(如果使用MS SQL)来查找问题,或者作为beta测试的一部分。根据SQL Server的版本,Aaron Bertran对选项进行了非常好的汇总 下面是一个使用SQLServer2008sys对象的示例,名为 创建或更改SP时,它只检查SP是否正确编译,而不是是否正确运行。您应该先测试
创建或更改SP时,它只检查SP是否正确编译,而不是是否正确运行。您应该先测试代码,然后再将其包装到SP first IMHO中,而不是动态创建代码。
CREATE FUNCTION dbo.scalarTest
(
@input1 INT,
@input2 INT
)
RETURNS INT
AS
BEGIN
-- Declare the return variable here
DECLARE @ResultVar int
-- Add the T-SQL statements to compute the return value here
SELECT @ResultVar = @input1 * @input2
-- Return the result of the function
RETURN @ResultVar
END
GO
--Fn Works!
SELECT dbo.ScalarTest(2,2)
GO
CREATE PROCEDURE dbo.procTest
AS
BEGIN
SELECT TOP 1 dbo.scalarTest(3, 3) as procResult
FROM sys.objects
END
GO
--Sproc Works!
EXEC dbo.procTest
GO
--Remove a dependency needed by our sproc
DROP FUNCTION dbo.scalarTest
GO
--Does anything have a broken dependency? YES
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,
referenced_entity_name, *
FROM sys.sql_expression_dependencies
WHERE referenced_id IS NULL --dependency is missing
GO
--Does it work? No
EXEC dbo.procTest
GO