diff --git a/src/driver/sqlserver/SqlServerQueryRunner.ts b/src/driver/sqlserver/SqlServerQueryRunner.ts index 43ee49dba9..06677627af 100644 --- a/src/driver/sqlserver/SqlServerQueryRunner.ts +++ b/src/driver/sqlserver/SqlServerQueryRunner.ts @@ -359,7 +359,7 @@ export class SqlServerQueryRunner extends BaseQueryRunner implements QueryRunner async hasColumn(tableOrName: Table|string, columnName: string): Promise { const parsedTableName = this.parseTableName(tableOrName); const schema = parsedTableName.schema === "SCHEMA_NAME()" ? parsedTableName.schema : `'${parsedTableName.schema}'`; - const sql = `SELECT * FROM "${parsedTableName.database}"."INFORMATION_SCHEMA"."TABLES" WHERE "TABLE_NAME" = '${parsedTableName.name}' AND "COLUMN_NAME" = '${columnName}' AND "TABLE_SCHEMA" = ${schema}`; + const sql = `SELECT * FROM "${parsedTableName.database}"."INFORMATION_SCHEMA"."COLUMNS" WHERE "TABLE_NAME" = '${parsedTableName.name}' AND "COLUMN_NAME" = '${columnName}' AND "TABLE_SCHEMA" = ${schema}`; const result = await this.query(sql); return result.length ? true : false; } diff --git a/test/functional/query-runner/has-column.ts b/test/functional/query-runner/has-column.ts new file mode 100644 index 0000000000..75903b8b73 --- /dev/null +++ b/test/functional/query-runner/has-column.ts @@ -0,0 +1,33 @@ +import "reflect-metadata"; +import {Connection} from "../../../src/connection/Connection"; +import {closeTestingConnections, createTestingConnections} from "../../utils/test-utils"; + +describe("query runner > has column", () => { + + let connections: Connection[]; + before(async () => { + connections = await createTestingConnections({ + entities: [__dirname + "/entity/*{.js,.ts}"], + schemaCreate: true, + dropSchema: true, + }); + }); + after(() => closeTestingConnections(connections)); + + it("should correctly check if column exist", () => Promise.all(connections.map(async connection => { + const queryRunner = connection.createQueryRunner(); + + let hasIdColumn = await queryRunner.hasColumn("post", "id"); + let hasNameColumn = await queryRunner.hasColumn("post", "name"); + let hasVersionColumn = await queryRunner.hasColumn("post", "version"); + let hasDescriptionColumn = await queryRunner.hasColumn("post", "description"); + + hasIdColumn.should.be.true; + hasNameColumn.should.be.true; + hasVersionColumn.should.be.true; + hasDescriptionColumn.should.be.false; + + await queryRunner.release(); + }))); + +});