【发布时间】:2020-10-14 03:45:51
【问题描述】:
测试有一个预期列的列表,用于验证实际表是否有它们。断言是如果计数在预期和实际中相等,则所有列都存在。
如何提取缺少的列以放入更有意义的错误消息中?
感谢您的帮助。
-- Verify added columns exist
CREATE PROC [testComplianceMaintenanceReporting].[test FactPropertyLatestRepairJobAgg_ColumnsExist]
AS
BEGIN
SET NOCOUNT ON
-- Assemble
IF OBJECT_ID('tempdb..#TempExpected') IS NOT NULL
BEGIN
DROP TABLE #TempExpected
END
CREATE TABLE #TempExpected
(
Id INT,
ColumnName NVARCHAR(50)
)
INSERT INTO #TempExpected
VALUES
(1, 'TenancyKey'),
(2, 'TenancyHouseholdTypeKey'),
(3, 'HomeVisitKeyLatest'),
(4, 'HomeVisitDueStatusKey'),
(5, 'HousingApplicationKey'),
(6, 'RepairAreaKeyPropertyDefault'),
(7, 'ContractKeyPropertyDefaultPMSCService'),
(8, 'ContractorKeyPropertyDefaultHeadContractor'),
(9, 'NextPeriodicHomeVisitDate'),
(10, 'CountOfActiveLeaseAgreements')
-- Action
IF OBJECT_ID('tempdb..#TempActual') IS NOT NULL
BEGIN
DROP TABLE #TempActual
END
SELECT * INTO #TempActual
FROM
(
SELECT
OBJECT_ID,
NAME
FROM SYS.COLUMNS
WHERE
OBJECT_ID = OBJECT_ID('dm.Fact_PropertyLatestRepairJobAgg')
AND NAME IN (SELECT ColumnName FROM #TempExpected)
) [TempActual]
-- Assert
DECLARE @expectedCount INT = (
SELECT COUNT(*) FROM #TempExpected
)
DECLARE @actualCount INT = (
SELECT COUNT(*) FROM #TempActual
)
EXEC tSQLt.AssertEquals
@Expected = @expectedCount,
@Actual = @actualCount,
@Message = 'There are missing columns'
END
GO
【问题讨论】:
标签: sql sql-server tsql sql-server-2016 tsqlt