View 的列包含看起来像 UUID 但列类型为 int 的数据。为什么?



我有权访问SQL Server 2016数据库上的视图。

名为"id_key"的列包含以下数据:

id_key
D93F37FC-3C2A-EB11-B813-00505690E502
B03D37FC-3C2A-EB11-B813-00505690E502
AC644CFC-3C2A-EB11-B813-00505690E502

我已经检查了列的类型:它是int

的确,的结果

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
TABLE_NAME = 'yourTableName' AND 
COLUMN_NAME = 'yourColumnName'

仅返回CCD_ 2。

我在SQL Server 2016文档中没有找到任何对此的解释。我错过什么了吗?int类型如何存储看起来像字符串/uuid的数据?

如果视图不是使用WITH SCHEMABINDING选项创建的,那么它引用的底层表可以自由更改。

有问题的列可能在创建视图时最初使用int数据类型,但随后更改为uniqueidentifier,例如:

drop view if exists dbo.yourViewName;
drop table if exists dbo.yourTableName;
go
create table dbo.yourTableName (
ignore int,
yourColumnName int
);
go
create view dbo.yourViewName --with schemabinding
as
select yourColumnName as id_key
from dbo.yourTableName
go
alter table dbo.yourTableName
drop column yourColumnName
go
alter table dbo.yourTableName
add yourColumnName uniqueidentifier
go
insert dbo.yourTableName (yourColumnName) values
('D93F37FC-3C2A-EB11-B813-00505690E502'),
('B03D37FC-3C2A-EB11-B813-00505690E502'),
('AC644CFC-3C2A-EB11-B813-00505690E502')
go
select * from dbo.yourViewName
go
select data_type
from information_schema.columns
where table_name = 'yourViewName'
and column_name = 'id_key'

哪个收益率:

id_key
------------------------------------
D93F37FC-3C2A-EB11-B813-00505690E502
B03D37FC-3C2A-EB11-B813-00505690E502
AC644CFC-3C2A-EB11-B813-00505690E502
data_type
----------
int

有关详细信息,请参阅CREATE VIEW(Transact-SQL(文档。

最新更新