在SSMS中,如何使用在KEY字后返回表名的函数FROM------。

问题描述 投票:0回答:1
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-server tsql variables user-defined-functions
1个回答
0
投票

假设你不能重新设计数据库,你可以做这样的事情。

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);

0
投票

如果使用一个函数或存储过程来获取表_名和动态SQL,用于将数据插入到 #table1那么你需要注意的是,临时表的范围在 select * into #table 是在动态SQL执行的范围内。这意味着你不能使用 #table 超越了动态SQL,甚至在同一个会话中。所以使用全局的临时表,如 ##table1 而不是本地临时表。

假设使用了一个函数 dbo.gettablename 来调出表名给。

DECLARE @SqCom nvarchar(255) = 'select * into ##table1 from ' + dbo.gettablename(1456)
EXEC (@SqCom);
SELECT * FROM ##table1;

-1
投票

希望这对你的情况有用

SELECT *, GetLatestTable (1456) INTO #table1
© www.soinside.com 2019 - 2024. All rights reserved.