Sql-Server
pg_typeof() 的 SQL Server 等效項是什麼,如何獲取結果集中返回的列的類型?
使用 PostgreSQL,我可以使用
pg_typeof(exp)
likeSELECT pg_typeof( cast(1 AS int) ); SELECT pg_typeof(x), x FROM foo;
並取回結果(
integer
在第一個範例的情況下)。是否有等效的 SQL Server?如何在結果集中找到給定欄位的結果?SELECT x FROM foo;
我想知道是什麼類型
x
的?
有各種間接方法,但沒有什麼比
pg_typeof
.
SQL_VARIANT_PROPERTY
通常是為了方便而使用,但由於它不能包含所有其他類型而有局限性。將查詢主題寫入表然後檢查元數據是一種方法。與針對元數據視圖編寫查詢相比,可以使用便捷系統儲存過程之類
sys.sp_help
的更方便的方法。另一個概念上相關的想法是呼叫:
例如:
EXECUTE sys.sp_describe_first_result_set @tsql = N'SELECT 1.0;' SELECT FRS.* FROM sys.dm_exec_describe_first_result_set (N'SELECT 1.0;', DEFAULT, DEFAULT) AS FRS;
這些返回大量內部資訊,包括類型詳細資訊。上面的範例返回:
別名類型範例:
CREATE TYPE Banana FROM binary(456) NOT NULL; EXECUTE sys.sp_describe_first_result_set @tsql = N'DECLARE @b Banana; SELECT @b;' SELECT FRS.system_type_id, FRS.system_type_name, FRS.user_type_id, FRS.user_type_schema, FRS.user_type_name FROM sys.dm_exec_describe_first_result_set (N'DECLARE @b Banana; SELECT @b;', DEFAULT, DEFAULT) AS FRS;
返回(部分):
一種方法是使用
SQL_VARIANT_PROPERTY( expression , property )
,whereproperty
is"BaseType"
。-- returns int SELECT SQL_VARIANT_PROPERTY(cast(42 as int), 'BaseType');
它也完全壞掉了
NULL
,-- returns null SELECT SQL_VARIANT_PROPERTY(cast(null AS int), 'BaseType');=
而且它不適用於所有類型,在不受支持的類型上它會恐慌。
Msg 206 Level 16 State 2 Line 1 Operand type clash: timestamp is incompatible with sql_variant
如果類型是使用者定義的類型(與系統基本類型相比),我似乎無法找到任何有用的資訊,它返回基本類型。