如何在另一个引用调用方中正确的sys.objects表的数据库中创建UDF或View?

mat*_*mc3 2 t-sql sql-server user-defined-functions

使用SQL Server 2008,我想创建一个UDF,它给我一个对象的创建日期.这是代码:

create function dbo.GetObjCreateDate(@objName sysname) returns datetime as
begin
    declare @result datetime
    select @result = create_date from sys.objects where name = @objname
    return @result
end
go
Run Code Online (Sandbox Code Playgroud)

我想将这个UDF放在master数据库或其他一些共享数据库中,以便可以从任何地方访问它,除非我这样做,然后sys.objects引用从master数据库而不是我正在启动我的查询的数据库.我知道你可以这样做,因为information_schema视图位于master并且只是包含对sys.objects的本地实例的调用,所以我希望有一个简单的方法来使用我的UDF.

小智 5

试试这个:

CREATE FUNCTION dbo.GetObjCreateDate(@objName sysname, @dbName sysname) 
RETURNS datetime AS
BEGIN
    DECLARE @createDate datetime;
    DECLARE @params nvarchar(50);
    DECLARE @sql nvarchar(500);

    SET @params = '@createDate datetime OUTPUT';

    SELECT @sql = 'SELECT @createDate = create_date FROM ' + @dbName + '.sys.objects WHERE name = ''' + @objname + '''';

    EXEC sp_executesql @sql, @params, @createDate = @createDate OUTPUT;         

     RETURN @createDate
END
;
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用,因为你不能从函数中使用动态SQL,也不能调用存储过程.它应该是存储过程. (3认同)