更改代码以使用系统功能
B_NAME()
而不是硬编码数据库名称。
Declare @DBNAME SYSNAME = DB_NAME()
, @Sql NVARCHAR(MAX);
IF (SELECT COUNT(*) FROM sys.change_tracking_databases WHERE database_id=DB_ID(@DBNAME)) = 0
Begin
SET @Sql = N' ALTER DATABASE '+ QUOTENAME(@DBNAME) + N'
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON) '
Exec sp_executesql @Sql
End
IF (SELECT COUNT(*) FROM sys.change_tracking_tables WHERE object_id=OBJECT_ID('TB_Styles')) = 0
Begin
ALTER TABLE [dbo].[TB_Styles] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)
En
另外,我不想使用count(*)=0,而是使用类似exists运算符的东西,它更干净。
Declare @DBNAME SYSNAME = DB_NAME()
, @Sql NVARCHAR(MAX);
IF NOT EXISTS (SELECT 1
FROM sys.change_tracking_databases
WHERE database_id = DB_ID(@DBNAME))
Begin
SET @Sql = N' ALTER DATABASE '+ QUOTENAME(@DBNAME) + N'
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON) '
Exec sp_executesql @Sql
End
IF NOT EXISTS ( SELECT 1
FROM sys.change_tracking_tables
WHERE object_id = OBJECT_ID('TB_Styles'))
Begin
ALTER TABLE [dbo].[TB_Styles]
ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)
End