Tsql 我可以创建一个包含无效用户定义函数名的存储库

Tsql 我可以创建一个包含无效用户定义函数名的存储库,tsql,Tsql,我只是注意到我可以用拼写错误的用户定义函数修改存储过程代码 我注意到在第一次执行SP时 当SP中包含无效的用户定义函数名时,有没有办法获得编译错误?在编译时?没有 但是,您可以在部署之后使用一些SQL依赖项对象(如果使用MS SQL)来查找问题,或者作为beta测试的一部分。根据SQL Server的版本,Aaron Bertran对选项进行了非常好的汇总 下面是一个使用SQLServer2008sys对象的示例,名为 创建或更改SP时,它只检查SP是否正确编译,而不是是否正确运行。您应该先测试

我只是注意到我可以用拼写错误的用户定义函数修改存储过程代码

我注意到在第一次执行SP时

当SP中包含无效的用户定义函数名时,有没有办法获得编译错误?

在编译时?没有

但是,您可以在部署之后使用一些SQL依赖项对象(如果使用MS SQL)来查找问题,或者作为beta测试的一部分。根据SQL Server的版本,Aaron Bertran对选项进行了非常好的汇总

下面是一个使用SQLServer2008sys对象的示例,名为


创建或更改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