gpt4 book ai didi

sql - 查找 SQL 临时表的数据类型

转载 作者:行者123 更新时间:2023-12-01 17:40:55 25 4
gpt4 key购买 nike

我需要从使用 #temp 表切换到 @table 变量,以便可以在函数中使用它。

我的查询使用插入#temp(来自多个表),如下所示:

SELECT 
a.col1,
a.col2,
b.col1...
INTO #temp
FROM ...

有没有一种简单的方法可以找出 #temp 表中列的数据类型,以便我可以创建具有与 #temp 相同的列和数据类型的 @table 变量?

最佳答案

您需要确保 sp_help 在表所在的同一数据库 (tempdb) 中运行。您可以通过直接为调用添加前缀来完成此操作:

EXEC tempdb.dbo.sp_help @objname = N'#temp';

或者通过在 tempdb.sys.columns 上添加连接前缀:

SELECT [column] = c.name, 
[type] = t.name, c.max_length, c.precision, c.scale, c.is_nullable
FROM tempdb.sys.columns AS c
INNER JOIN tempdb.sys.types AS t
ON c.system_type_id = t.system_type_id
AND t.system_type_id = t.user_type_id
WHERE [object_id] = OBJECT_ID(N'tempdb.dbo.#temp');

这对你来说并没有什么好处,比如调整 varchar 的 max_length 与 nvarchar 不同,但这是一个好的开始。

在 SQL Server 2012 或更高版本中,您可以使用新的 DMF 来描述结果集,从而消除该问题(并且还可以为您组合 max_length/precision/scale)。但它不支持#temp 表,因此只需注入(inject)查询而不带 INTO:

SELECT name, system_type_name, is_nullable
FROM sys.dm_exec_describe_first_result_set(N'SELECT
a.col1,
a.col2,
b.col1...
--INTO #temp
FROM ...;',NULL,1);

关于sql - 查找 SQL 临时表的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7486941/

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