diff --git a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java index 1e82f2c12d4a13b8dbf55f52c34ba46c705a779d..52b6f22be40b8178f7f3cd4d09915d3f6a06a210 100644 --- a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java +++ b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java @@ -23,6 +23,7 @@ import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ext.generic.model.*; import org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel; import org.jkiss.dbeaver.model.DBPDataSourceContainer; +import org.jkiss.dbeaver.model.DBPEvaluationContext; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.exec.DBCQueryTransformProvider; import org.jkiss.dbeaver.model.exec.DBCQueryTransformType; @@ -79,6 +80,23 @@ public class SQLServerMetaModel extends GenericMetaModel implements DBCQueryTran @Override public String getProcedureDDL(DBRProgressMonitor monitor, GenericProcedure sourceObject) throws DBException { + if (isSqlServer()) { + try (JDBCSession session = DBUtils.openMetaSession(monitor, sourceObject.getDataSource(), "Read routine definition")) { + try (JDBCPreparedStatement dbStat = session.prepareStatement( + "SELECT definition FROM " + DBUtils.getQuotedIdentifier(sourceObject.getCatalog()) + ".sys.sql_modules WHERE object_id=OBJECT_ID(?)" + )) { + dbStat.setString(1, sourceObject.getFullyQualifiedName(DBPEvaluationContext.DML)); + try (JDBCResultSet dbResult = dbStat.executeQuery()) { + if (dbResult.nextRow()) { + return dbResult.getString(1); + } + return "-- Routine '" + sourceObject.getName() + "' definition not found in "; + } + } + } catch (SQLException e) { + throw new DBException(e, sourceObject.getDataSource()); + } + } return extractSource(monitor, sourceObject.getDataSource(), sourceObject.getCatalog().getName(), sourceObject.getSchema().getName(), sourceObject.getName()); }