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

标签 sql-server tsql 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

我想把这个 UDF 放在 master 数据库或其他一些共享数据库中,这样它就可以从任何地方访问,除非我这样做,然后 sys.objects 引用从master 数据库,而不是我从中启动查询的数据库。我知道你可以做到这一点,因为 information_schema View 位于 master 中,只是包装对 sys.objects 的本地实例的调用,所以我希望有一种简单的方法可以做到我的 UDF 也是如此。

最佳答案

试试这个:

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
;

关于sql-server - 如何在另一个数据库中创建引用调用者中正确的 sys.objects 表的 UDF 或 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4035024/

相关文章:

SQL 错误的百分比计算

python - 使用 sqlAlchemy 存储过程

sql-server - 在 sql 查询中替换第一个 FROM

excel - 在 VBA 的 UDF 中将单元格作为参数传递的正确方法是什么?

api - 使用hue api注册配置单元udf

sql - 在 SQL Server 中的 exec() 外部声明的 exec() 中设置变量

sql - 存储过程中的错误 : current transaction cannot be commited and cannot support operations that write to the log file

sql-server - 如何在 SQL Server 中编写 foreach?

sql - 在这种情况下如何使用 T-SQL MERGE?

scala - 无法让 Spark 聚合器正常工作