diff --git a/Part3.sql b/Part3.sql index 0b834f5..d0bbcf0 100644 --- a/Part3.sql +++ b/Part3.sql @@ -38,9 +38,20 @@ DECLARE colCur CURSOR LOCAL FAST_FORWARD FOR ColumnDataType FROM DBO.TEMP2 WHERE ObjectType = 'TABLE'; + PARSENAME(TMP.ObjectName, 2) AS SchemaName, + PARSENAME(TMP.ObjectName, 1) AS TableName, + TMP.ColumnName, + TMP.ColumnDataType, + c.is_nullable + FROM DBO.TEMP2 TMP + INNER JOIN sys.schemas s ON s.name = PARSENAME(TMP.ObjectName, 2) + INNER JOIN sys.tables t ON t.schema_id = s.schema_id AND t.name = PARSENAME(TMP.ObjectName, 1) + INNER JOIN sys.columns c ON c.object_id = t.object_id AND c.name = TMP.ColumnName + 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 @@ -63,6 +74,8 @@ BEGIN 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. -- ? Build ALTER COLUMN with correct nullability SET @AlterSQL = 'ALTER TABLE ' + QUOTENAME(@Schema) + '.' + QUOTENAME(@Table) + @@ -111,6 +124,7 @@ BEGIN END CATCH FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType; + FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable; END CLOSE colCur; @@ -129,6 +143,19 @@ DECLARE @OBJNAME NVARCHAR(MAX) DECLARE curCreate1 CURSOR FAST_FORWARD FOR SELECT createscript, ViewFullName FROM SchemaBoundViews ; +DECLARE curCreate1 CURSOR LOCAL FAST_FORWARD FOR + SELECT + REPLACE( + SUBSTRING( + createscript, + CHARINDEX('CREATE VIEW', UPPER(createscript)), + LEN(createscript) + ), + 'CREATE VIEW', + 'CREATE OR ALTER VIEW' + ) AS createscript, + ViewFullName + FROM SchemaBoundViews; OPEN curCreate1; FETCH NEXT FROM curCreate1 INTO @CreateSQL2,@OBJNAME;