首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在SSMS中,如何使用在关键字FROM之后返回表名的函数

在SSMS中,如何使用在关键字FROM之后返回表名的函数
EN

Stack Overflow用户
提问于 2020-04-28 14:02:45
回答 3查看 81关注 0票数 0
代码语言:javascript
复制
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。

EN

回答 3

Stack Overflow用户

发布于 2020-04-28 15:48:20

假设你不能重新设计数据库,你可以这样做:

代码语言:javascript
复制
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

并像这样使用它

代码语言:javascript
复制
DECLARE @LastTableName nvarchar(216) = dbo.GetLatestTable(1456);
票数 0
EN

Stack Overflow用户

发布于 2020-04-28 18:31:45

如果使用函数或过程来获取用于将数据插入到#table1中的table_name和dynamic SQL,那么您需要注意,select * into #table中的临时表的作用域是在dynamic SQL执行的作用域内。这意味着您不能在动态#table之外使用SQL,即使在同一会话中也是如此。所以使用全局临时表,例如##table1,而不是本地临时表。

假设使用了函数dbo.gettablename来提取表名,给出了:

代码语言:javascript
复制
DECLARE @SqCom nvarchar(255) = 'select * into ##table1 from ' + dbo.gettablename(1456)
EXEC (@SqCom);
SELECT * FROM ##table1;
票数 0
EN

Stack Overflow用户

发布于 2020-04-28 14:29:50

希望这对你的情况有效:

代码语言:javascript
复制
SELECT *, GetLatestTable (1456) INTO #table1
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61473615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档