Jun 24, 2026, 12:32 PM
This commit is contained in:
@@ -32,12 +32,6 @@ DECLARE @IsNullable BIT; -- track nullability
|
||||
|
||||
DECLARE colCur CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT DISTINCT
|
||||
PARSENAME(ObjectName, 2) AS SchemaName,
|
||||
PARSENAME(ObjectName, 1) AS TableName,
|
||||
ColumnName,
|
||||
ColumnDataType
|
||||
FROM DBO.TEMP2
|
||||
WHERE ObjectType = 'TABLE';
|
||||
PARSENAME(TMP.ObjectName, 2) AS SchemaName,
|
||||
PARSENAME(TMP.ObjectName, 1) AS TableName,
|
||||
TMP.ColumnName,
|
||||
@@ -50,30 +44,12 @@ DECLARE colCur CURSOR LOCAL FAST_FORWARD FOR
|
||||
WHERE TMP.ObjectType = 'TABLE';
|
||||
|
||||
OPEN colCur;
|
||||
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType;
|
||||
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
BEGIN TRY
|
||||
|
||||
-- ====================================================
|
||||
-- ? Check if column is currently NOT NULL
|
||||
-- so we can preserve it after datatype change
|
||||
-- If original was NOT NULL ? keep NOT NULL
|
||||
-- If original was NULL ? keep NULL
|
||||
-- Without this PK columns become nullable
|
||||
-- and PK recreation fails
|
||||
-- ====================================================
|
||||
SELECT @IsNullable = c.is_nullable
|
||||
FROM sys.columns c
|
||||
JOIN sys.tables t
|
||||
ON t.object_id = c.object_id
|
||||
JOIN sys.schemas s
|
||||
ON s.schema_id = t.schema_id
|
||||
WHERE s.name = @Schema
|
||||
AND t.name = @Table
|
||||
AND c.name = @Column;
|
||||
-- Nullability is now pre-fetched directly in the cursor declaration.
|
||||
-- Preserving NOT NULL so PK columns do not become nullable.
|
||||
|
||||
@@ -123,7 +99,6 @@ BEGIN
|
||||
--THROW;
|
||||
END CATCH
|
||||
|
||||
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType;
|
||||
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable;
|
||||
END
|
||||
|
||||
@@ -140,9 +115,6 @@ PRINT '--- RECREATING SCHEMA-BOUND VIEWS ---';
|
||||
DECLARE @CreateSQL2 NVARCHAR(MAX);
|
||||
DECLARE @OBJNAME NVARCHAR(MAX)
|
||||
|
||||
DECLARE curCreate1 CURSOR FAST_FORWARD FOR
|
||||
SELECT createscript, ViewFullName
|
||||
FROM SchemaBoundViews ;
|
||||
DECLARE curCreate1 CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT
|
||||
REPLACE(
|
||||
@@ -165,14 +137,6 @@ BEGIN
|
||||
begin try
|
||||
PRINT 'Creating view:';
|
||||
|
||||
SET @CreateSQL2 = SUBSTRING(
|
||||
@CreateSQL2,
|
||||
CHARINDEX('CREATE VIEW', UPPER(@CreateSQL2)),
|
||||
LEN(@CreateSQL2)
|
||||
);
|
||||
|
||||
-- ? Convert to CREATE OR ALTER so it works whether view exists or not
|
||||
SET @CreateSQL2 = REPLACE(@CreateSQL2, 'CREATE VIEW', 'CREATE OR ALTER VIEW');
|
||||
PRINT '--- RECREATING SCHEMA-BOUND VIEWS ---';
|
||||
|
||||
IF @DryRun = 1
|
||||
@@ -209,4 +173,3 @@ END
|
||||
|
||||
CLOSE curCreate1;
|
||||
DEALLOCATE curCreate1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user