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

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

How to determine internal name of table-valued variable in MS SQL Server 2005

可以使用

确定临时表的名称,例如#t1

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

如何找到表值变量的名称,即由

声明的变量

1
declare @t2 as table (a int)

目的是能够使用

之类的东西获取有关表的元信息。

1
2
3
4
5
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中,必须对参数进行强类型化,因此您将始终知道列的数量和类型。


n


来自在线图书:

表变量的行为类似于局部变量。它具有定义明确的范围,即它在其中声明的函数,存储过程或批处理。

鉴于此,应该不必在运行时查找此值,因为您必须在设计时知道它。


我不相信您可以,因为表变量是在内存中而不是在tempdb中创建的。


关于将任意列表/数组传递到SQL Server 2005函数或sproc的主题,
我所知道的最简单的方法是使用XML变量。如果需要,该XML变量可以是与XML模式相关联的强类型XML类型。

给定一个以XML形式传递到过程/函数的列表,您可以通过"切碎"将该列表提取到表变量或临时表中。
"切碎" XML意味着朝相反的方向转换-从XML到行集。 (FOR XML子句导致将行集转换为XML。)

在用户定义的表函数中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE FUNCTION [dbo].[udtShredXmlInputBondIdList]  
(
-- Add the parameters for the function here
@xmlInputBondIdList xml
)
RETURNS
@tblResults TABLE
(
-- Add the column definitions for the TABLE variable here
    BondId int
)
AS
BEGIN
-- Should add a schema validation for @xmlInputIssuerIdList here
--Place validation here
-- Fill the table variable with the rows for your result set
INSERT @tblResults
SELECT  
nref.value('.', 'int') as BondId
FROM
@xmlInputBondIdList.nodes('//BondID') as R(nref)
RETURN
END

如果@xmlInputBondIdList是预期结构的XML片段(如以下所示),则按以下方式调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE @xmlInputBondIdList xml
SET @xmlInputBondIdList =
'<XmlInputBondIdList>

<BondID>8681</BondID>

<BondID>8680</BondID>

<BondID>8684</BondID>

</XmlInputBondIdList>
'


SELECT *
FROM [CorporateBond].[dbo].[udtShredXmlInputBondIdList]
     (@xmlInputBondIdList)

结果将是行集

BondId

8681

8680

8684

可以在http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=678284中找到其他几个示例。


推荐阅读

    linux内部命令在哪里?

    linux内部命令在哪里?,系统,管理,工具,名称,命令,首页,位置,电脑,发行,终端,l

    如何在linux下命令?

    如何在linux下命令?,系统,地址,位置,情况,密码,一致,工具,环境,手机,电脑,lin

    linux修改名称命令?

    linux修改名称命令?,系统,名称,图片,查询系统,代码,名字,命令,用户,文件名,

    如何在linux执行命令?

    如何在linux执行命令?,单位,电脑,命令,系统,基础,发行,工具,工作,信息,文件,m

    linux变量释放命令?

    linux变量释放命令?,系统,环境,名称,工具,官网,简介,变量,环境变量,命令,内

    linux安装内部命令?

    linux安装内部命令?,软件,官网,在线,系统,百度,发行,命令,终端,方式,服务器,l

    linux安装内部命令?

    linux安装内部命令?,软件,官网,在线,系统,百度,发行,命令,终端,方式,服务器,l

    linux调出变量的命令?

    linux调出变量的命令?,系统,工作,工具,信息,地址,代码,标准,名称,官网,命令,l

    如何在linux命令清屏?

    如何在linux命令清屏?,系统,地址,信息,基础,电脑,命令,名称,集团,产品,管理,

    linux命令主机名变量?

    linux命令主机名变量?,系统,主机名,查询系统,命令,终端,编辑,提示符,根目

    linux如何在线装命令?

    linux如何在线装命令?,软件,系统,环境,发行,在线,名称,简介,工具,设备,做好,

    linux改u盘名称命令?

    linux改u盘名称命令?,系统,电脑,设备,名称,位置,工具,入主,盘中,地址,第一,li

    linux变量是一个命令?

    linux变量是一个命令?,系统,信息,变量,名称,官网,地址,环境,代码,地方,命令,$

    linux中变量取余命令?

    linux中变量取余命令?,地址,工作,系统,数据,信息,命令,分析,目录,控制台,文

    cd是linux内部命令?

    cd是linux内部命令?,工作,系统,一致,命令,传播,目录,根目录,缩写,用户,上级,l

    linux修改命令名称?

    linux修改命令名称?,时间,系统,名称,图片,保险,代码,名字,一致,命令,文件,为

    加载变量的linux命令?

    加载变量的linux命令?,工具,系统,名称,环境变量,环境,命令,用户,文件,变量,

    linux中的内部命令?

    linux中的内部命令?,系统,软件,盘中,命令,外部,内存,内部,目录,功能,文件,lin

    linux脚本内部命令?

    linux脚本内部命令?,系统,命令,状态,软件,盘中,数据,多地,名称,实时,进程,lin

    linux命令有哪些内部?

    linux命令有哪些内部?,系统,命令,信息,工作,软件,盘中,地址,时间,管理,工具,