首页 > 解决方案 > 在 SSMS 中,如何使用在 KEY 字 FROM 后返回表名的函数

问题描述

CREATE FUNCTION [dbo].GetLatestTable (@id int)
    RETURNS nvarchar(max)
    BEGIN
        declare @a varchar(150)
        declare @b varchar(150)
        declare @c varchar(150)
        set @c = (select '%ID' + Cast(@id as nvarchar))
        set @a = (select top 1 name
            from sys.tables
            where name like @c
            order by create_date desc)
        set @b = '[dbo].[' + @a + ']'
    RETURN @b;
END;

SELECT * INTO #table1
from 
    (SELECT * FROM GetLatestTable (1456)) as temp

我想将使用包含特定整数的名称创建的最新表存储到临时表中。

示例表名称如下所示:[database].[dbo].[RQ39411ID1367]

我需要从函数中获取它,因为稍后我需要在查询中将此函数用于其他表名。

请帮助我更改 SSMS 的语法。

标签: sql-servertsqlvariablesuser-defined-functions

解决方案


假设您无法重新设计数据库,您可以执行以下操作:

CREATE FUNCTION [dbo].GetLatestTable (@id int)
    RETURNS nvarchar(261)
AS
BEGIN

RETURN (
    SELECT TOP 1 quotename(s.name) + '.' + quotename(t.name)
    FROM sys.tables As t
    JOIN sys.schemas As s
        ON t.schema_id = s.schema_id
    WHERE t.name LIKE '%ID' + CAST(@Id as nvarchar(11))
    ORDER BY t.create_date DESC
);

END

并像这样使用它

DECLARE @LastTableName nvarchar(216) = dbo.GetLatestTable(1456);

推荐阅读