Jun 24, 2026, 10:39 AM

This commit is contained in:
Paweł Domański
2026-06-24 08:39:10 +00:00
parent 49048fe9b6
commit 3921804338
+27
View File
@@ -38,9 +38,20 @@ DECLARE colCur CURSOR LOCAL FAST_FORWARD FOR
ColumnDataType ColumnDataType
FROM DBO.TEMP2 FROM DBO.TEMP2
WHERE ObjectType = 'TABLE'; 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; OPEN colCur;
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType; FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType;
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable;
WHILE @@FETCH_STATUS = 0 WHILE @@FETCH_STATUS = 0
BEGIN BEGIN
@@ -63,6 +74,8 @@ BEGIN
WHERE s.name = @Schema WHERE s.name = @Schema
AND t.name = @Table AND t.name = @Table
AND c.name = @Column; 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 -- ? Build ALTER COLUMN with correct nullability
SET @AlterSQL = 'ALTER TABLE ' + QUOTENAME(@Schema) + '.' + QUOTENAME(@Table) + SET @AlterSQL = 'ALTER TABLE ' + QUOTENAME(@Schema) + '.' + QUOTENAME(@Table) +
@@ -111,6 +124,7 @@ BEGIN
END CATCH END CATCH
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType; FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType;
FETCH NEXT FROM colCur INTO @Schema, @Table, @Column, @OldDataType, @IsNullable;
END END
CLOSE colCur; CLOSE colCur;
@@ -129,6 +143,19 @@ DECLARE @OBJNAME NVARCHAR(MAX)
DECLARE curCreate1 CURSOR FAST_FORWARD FOR DECLARE curCreate1 CURSOR FAST_FORWARD FOR
SELECT createscript, ViewFullName SELECT createscript, ViewFullName
FROM SchemaBoundViews ; 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; OPEN curCreate1;
FETCH NEXT FROM curCreate1 INTO @CreateSQL2,@OBJNAME; FETCH NEXT FROM curCreate1 INTO @CreateSQL2,@OBJNAME;