gpt4 book ai didi

tsql - 如何确定 MS SQL Server 2005 中表值变量的内部名称

转载 作者:行者123 更新时间:2023-12-01 01:38:31 26 4
gpt4 key购买 nike

可以使用以下命令确定临时表的名称,例如 #t1

select @TableName = [Name]
from tempdb.sys.tables
where [Object_ID] = object_id('tempDB.dbo.#t1')

如何找到表值变量的名称,即由
declare @t2 as table (a int)

目的是能够获取有关表的元信息,使用类似
select @Headers = dbo.Concatenate('[' + c.[Name] + ']')  
from sys.all_columns c
inner join sys.tables t
on c.object_id = t.object_id
where t.name = @TableName

尽管对于临时表,您必须查看 tempdb.sys.tables而不是 sys.tables .你在哪里寻找表值变量?

我现在意识到我不能做我想做的事情,那就是编写一个通用函数来将表值变量格式化为 html 表。对于初学者,在 sql server 2005 中你不能传递表值参数:

http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

此外,在 sql server 2008 中,参数必须是强类型的,因此您将始终知道列的数量和类型。

最佳答案

表变量元数据可在 tempdb.sys.tables 中查看也。这很容易从下面验证

declare @t2 as table ( [38F055D8-25D9-4AA6-9571-F436FE] int)

SELECT t.name, t.object_id
FROM tempdb.sys.tables t
JOIN tempdb.sys.columns c
ON t.object_id = c.object_id
WHERE c.name = '38F055D8-25D9-4AA6-9571-F436FE'

示例结果
name                           object_id
------------------------------ -----------
#4DB4832C 1303675692

但是您会注意到对象名称是自动生成的,与变量名称无关。

如果你没有一个保证唯一的列名,你可以用来过滤,并且表变量中至少有一行,你可以(从 SQL Server 2008 开始)使用 %%physloc%%DBCC PAGE来确定这些信息。下面举例。
DECLARE @t2 AS TABLE ( a INT)

INSERT INTO @t2
VALUES (1)

DECLARE @DynSQL NVARCHAR(100)

SELECT TOP (1) @DynSQL = 'DBCC PAGE(2,' + CAST(file_id AS VARCHAR) + ',' +
CAST( page_id AS VARCHAR) +
',1) WITH TABLERESULTS'
FROM @t2
CROSS APPLY sys.fn_PhysLocCracker( %% physloc %% )

DECLARE @DBCCPage TABLE (
[ParentObject] [VARCHAR](100) NULL,
[Object] [VARCHAR](100) NULL,
[Field] [VARCHAR](100) NULL,
[VALUE] [VARCHAR](100) NULL )

INSERT INTO @DBCCPage
EXEC (@DynSQL)

SELECT VALUE AS object_id,
OBJECT_NAME(VALUE, 2) AS object_name
FROM @DBCCPage
WHERE Field = 'Metadata: ObjectId'

关于tsql - 如何确定 MS SQL Server 2005 中表值变量的内部名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/95842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com