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
|
DECLARE colCur CURSOR LOCAL FAST_FORWARD FOR
|
||||||
SELECT DISTINCT
|
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, 2) AS SchemaName,
|
||||||
PARSENAME(TMP.ObjectName, 1) AS TableName,
|
PARSENAME(TMP.ObjectName, 1) AS TableName,
|
||||||
TMP.ColumnName,
|
TMP.ColumnName,
|
||||||
@@ -50,30 +44,12 @@ DECLARE colCur CURSOR LOCAL FAST_FORWARD FOR
|
|||||||
WHERE TMP.ObjectType = 'TABLE';
|
WHERE TMP.ObjectType = 'TABLE';
|
||||||
|
|
||||||
OPEN colCur;
|
OPEN colCur;
|
||||||
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType;
|
|
||||||
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable;
|
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable;
|
||||||
|
|
||||||
WHILE @@FETCH_STATUS = 0
|
WHILE @@FETCH_STATUS = 0
|
||||||
BEGIN
|
BEGIN
|
||||||
BEGIN TRY
|
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.
|
-- Nullability is now pre-fetched directly in the cursor declaration.
|
||||||
-- Preserving NOT NULL so PK columns do not become nullable.
|
-- Preserving NOT NULL so PK columns do not become nullable.
|
||||||
|
|
||||||
@@ -123,7 +99,6 @@ BEGIN
|
|||||||
--THROW;
|
--THROW;
|
||||||
END CATCH
|
END CATCH
|
||||||
|
|
||||||
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType;
|
|
||||||
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable;
|
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable;
|
||||||
END
|
END
|
||||||
|
|
||||||
@@ -140,9 +115,6 @@ PRINT '--- RECREATING SCHEMA-BOUND VIEWS ---';
|
|||||||
DECLARE @CreateSQL2 NVARCHAR(MAX);
|
DECLARE @CreateSQL2 NVARCHAR(MAX);
|
||||||
DECLARE @OBJNAME NVARCHAR(MAX)
|
DECLARE @OBJNAME NVARCHAR(MAX)
|
||||||
|
|
||||||
DECLARE curCreate1 CURSOR FAST_FORWARD FOR
|
|
||||||
SELECT createscript, ViewFullName
|
|
||||||
FROM SchemaBoundViews ;
|
|
||||||
DECLARE curCreate1 CURSOR LOCAL FAST_FORWARD FOR
|
DECLARE curCreate1 CURSOR LOCAL FAST_FORWARD FOR
|
||||||
SELECT
|
SELECT
|
||||||
REPLACE(
|
REPLACE(
|
||||||
@@ -165,14 +137,6 @@ BEGIN
|
|||||||
begin try
|
begin try
|
||||||
PRINT 'Creating view:';
|
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 ---';
|
PRINT '--- RECREATING SCHEMA-BOUND VIEWS ---';
|
||||||
|
|
||||||
IF @DryRun = 1
|
IF @DryRun = 1
|
||||||
@@ -209,4 +173,3 @@ END
|
|||||||
|
|
||||||
CLOSE curCreate1;
|
CLOSE curCreate1;
|
||||||
DEALLOCATE curCreate1;
|
DEALLOCATE curCreate1;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user