in internal/database/sqlserver/sqlserver.go [435:501]
func (h sqlServerHandler) GenerateTableCommentSQL(db *database.DB, data *database.TableCommentData, enrichments map[string]bool) (string, error) {
if data == nil || data.TableName == "" {
return "", fmt.Errorf("table comment data cannot be nil or empty")
}
config := database.GetConfig()
newMetadataComment := h.generateTableMetadataComment(data, enrichments)
existingComment, err := h.GetTableComment(context.Background(), db, data.TableName)
if err != nil {
return "", err
}
finalComment := h.mergeComments(existingComment, newMetadataComment, config.UpdateExistingMode)
if finalComment == "" {
return "", nil
}
// Check if the extended property already exists for the table
checkQuery := `
SELECT 1
FROM sys.extended_properties
WHERE class = 1 -- Object or column
AND class_desc = 'OBJECT_OR_COLUMN'
AND major_id = OBJECT_ID(@tableName)
AND minor_id = 0 -- Table level (minor_id is 0 for table)
AND name = N'MS_Description';
`
var exists int
err = db.QueryRow(checkQuery, sql.Named("tableName", data.TableName)).Scan(&exists)
var sqlStmt string
if err != nil && err != sql.ErrNoRows {
// An actual error occurred during the check
return "", fmt.Errorf("failed to check for existing table comment: %w", err)
} else if err == sql.ErrNoRows {
// No existing comment, use sp_addextendedproperty
sqlStmt = fmt.Sprintf(`
EXEC sp_addextendedproperty
@name = N'MS_Description',
@value = N'%s',
@level0type = N'SCHEMA',
@level0name = N'dbo',
@level1type = N'TABLE',
@level1name = %s;`,
finalComment,
h.QuoteIdentifier(data.TableName),
)
} else {
// Existing comment, use sp_updateextendedproperty
sqlStmt = fmt.Sprintf(`
EXEC sp_updateextendedproperty
@name = N'MS_Description',
@value = N'%s',
@level0type = N'SCHEMA',
@level0name = N'dbo',
@level1type = N'TABLE',
@level1name = %s;`,
finalComment,
h.QuoteIdentifier(data.TableName),
)
}
return sqlStmt, nil
}