Tenho duas tabelas temporais unidas por uma view, e quando altero a segunda tabela, e chamo sp_refreshview
, gera o erro:
A visualização ou função 'ViewTest' tem mais nomes de colunas especificados do que colunas definidas.
Percebi que depois de chamar sp_refreshview
, select *
na segunda tabela agora está incorporando as colunas ocultas de data e hora destinadas ao controle de versão do sistema.
Abaixo está o código de teste que escrevi para demonstrar o problema.
USE Test;
ALTER TABLE Department SET ( SYSTEM_VERSIONING = OFF)
GO
ALTER TABLE DepartmentTwo SET ( SYSTEM_VERSIONING = OFF)
GO
DROP TABLE IF EXISTS DepartmentTwo;
DROP TABLE IF EXISTS Department;
CREATE TABLE Department
(
DeptID INT NOT NULL PRIMARY KEY CLUSTERED,
DeptName VARCHAR(50) NOT NULL,
ManagerID INT NULL,
ParentDeptID INT NULL,
ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON);
CREATE TABLE DepartmentTwo
(
DeptID INT NOT NULL FOREIGN KEY REFERENCES Department(DeptId),
DeptTwoID INT NOT NULL PRIMARY KEY CLUSTERED,
ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON);
DROP VIEW IF EXISTS ViewTest;
GO
CREATE VIEW ViewTest
AS
SELECT
d.DeptName,
d.ManagerID,
d.ParentDeptID,
dt.*
FROM Department d
LEFT OUTER JOIN DepartmentTwo dt on d.DeptID = dt.DeptID
GO
ALTER TABLE DepartmentTwo ADD NewCol int;
GO
execute sp_refreshview 'ViewTest';
GO
select * from ViewTest;
Existe algum comportamento específico nas tabelas temporais que está fazendo com que as colunas de data e hora comecem a ser mostradas na visualização, mesmo que devam estar ocultas? Abaixo está um exemplo de como começa a incorporar as colunas de versão do sistema (ValidFrom, ValidTwo), com a instrução select gerada via SSMS:
/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP (1000) [DeptName]
,[ManagerID]
,[ParentDeptID]
,[DeptID]
,[DeptTwoID]
,[ValidFrom]
,[ValidTo]
,[NewCol]
FROM [Test].[dbo].[ViewTest]