当前位置:  开发笔记 > 前端 > 正文

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

如何解决《如何在MSSQLServer2005中确定表值变量的内部名称》经验,为你挑选了1个好方法。

可以使用确定#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中,参数必须是强类型的,因此您将始终知道列的数量和类型.



1> Martin Smith..:

表变量元数据也可以查看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'  

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有