Jun 24, 2026, 12:32 PM

This commit is contained in:
Paweł Domański
2026-06-24 10:32:58 +00:00
parent 3921804338
commit afee57c479
-37
View File
@@ -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;