JDBCTEMPLATE ist nicht in der Lage, externe Tabelle zu erstellen
Posted: 11 May 2025, 23:50
Arbeiten an einem Projekt, bei dem Daten aus einer anderen Azure -Datenbank abgerufen werden müssen. Daher verwenden wir einen externen Link für dasselbe.
Ich kann das Ergebnis sehen, das srcextDataSource .>
Code: Select all
private static final String CREATE_MASTER_KEY_QUERY = "CREATE MASTER KEY ENCRYPTION BY PASSWORD = '%s'";
private static final String CREATE_SCOPED_CREDENTIAL_QUERY = """
CREATE DATABASE SCOPED CREDENTIAL srcDbCred \
WITH IDENTITY = '%s', \
SECRET = '%s' \
""";
private static final String CREATE_EXTERNAL_DATA_SOURCE_QUERY = """
CREATE EXTERNAL DATA SOURCE srcExtDataSource \
WITH ( \
TYPE = RDBMS, \
LOCATION = '%s', \
DATABASE_NAME = '%s', \
CREDENTIAL = srcDbCred \
)
""";
public void createMasterKey() {
DataSource dataSource = destJdbcTemplate.getDataSource();
if (dataSource instanceof com.zaxxer.hikari.HikariDataSource hikariDataSource) {
destJdbcTemplate.execute(String.format(CREATE_MASTER_KEY_QUERY , hikariDataSource.getPassword()));
}
}
public void createScopedCredential() {
DataSource dataSource = destJdbcTemplate.getDataSource();
if (dataSource instanceof com.zaxxer.hikari.HikariDataSource hikariDataSource) {
destJdbcTemplate.execute(String.format(CREATE_SCOPED_CREDENTIAL_QUERY, hikariDataSource.getUsername(),
hikariDataSource.getPassword()));
}
}
public void createExternalDataSource() throws SQLException {
DataSource dataSource = srcJdbcTemplate.getDataSource();
if (dataSource instanceof com.zaxxer.hikari.HikariDataSource hikariDataSource) {
destJdbcTemplate.execute(String.format(CREATE_EXTERNAL_DATA_SOURCE_QUERY, hikariDataSource.getJdbcUrl(), hikariDataSource.getConnection().getCatalog()));
}
}
< /code>
Aber beim Ausführen von externer Tabelle erstellen Sie den Fehler < /p>
org.springFramework.jdbc.uncategorizedSqlexception: AnweisungCallback; Uncategorisierte SQLEXception für SQL [Erstellen Sie externe Tabelle [DBO]. [Employee_external] (emp_name nvarchar (40) nicht null) mit (data_source = srcextDataSource, Schema_Name = 'DBO', Object_name = 'personal']]; SQL -Staat [S0001]; Fehlercode [46501]; Externe Tabellenreferenzen 'Data_Source', die nicht existiert.select name from sys.external_data_sources