@@ -165,7 +165,7 @@ def column_definitions(table_name)
165165 columns.ordinal_position,
166166 CASE
167167 WHEN columns.DATA_TYPE IN ('nchar','nvarchar') THEN columns.CHARACTER_MAXIMUM_LENGTH
168- ELSE COL_LENGTH(columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME, columns.COLUMN_NAME)
168+ ELSE COL_LENGTH(' #{ db_name_with_period } '+ columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME, columns.COLUMN_NAME)
169169 END AS [length],
170170 CASE
171171 WHEN columns.IS_NULLABLE = 'YES' THEN 1
@@ -175,19 +175,27 @@ def column_definitions(table_name)
175175 WHEN KCU.COLUMN_NAME IS NOT NULL AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY' THEN 1
176176 ELSE NULL
177177 END AS [is_primary],
178- CASE
179- WHEN COLUMNPROPERTY(OBJECT_ID(columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity') = 1 THEN 1
180- ELSE NULL
181- END AS [is_identity]
178+ c.is_identity AS [is_identity]
182179 FROM #{ db_name_with_period } INFORMATION_SCHEMA.COLUMNS columns
183- LEFT OUTER JOIN #{ db_name_with_period } INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
184- ON TC.TABLE_NAME = columns.TABLE_NAME
185- AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
180+ LEFT OUTER JOIN #{ db_name_with_period } INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
181+ ON TC.TABLE_NAME = columns.TABLE_NAME
182+ AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
186183 LEFT OUTER JOIN #{ db_name_with_period } INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
187184 ON KCU.COLUMN_NAME = columns.COLUMN_NAME
188185 AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
189186 AND KCU.CONSTRAINT_CATALOG = TC.CONSTRAINT_CATALOG
190187 AND KCU.CONSTRAINT_SCHEMA = TC.CONSTRAINT_SCHEMA
188+ INNER JOIN #{ db_name_with_period } .sys.schemas AS s
189+ ON s.name = columns.TABLE_SCHEMA
190+ AND s.schema_id = s.schema_id
191+ INNER JOIN #{ db_name_with_period } .sys.objects AS o
192+ ON s.schema_id = o.schema_id
193+ AND o.is_ms_shipped = 0
194+ AND o.type IN ('U', 'V')
195+ AND o.name = columns.TABLE_NAME
196+ INNER JOIN #{ db_name_with_period } .sys.columns AS c
197+ ON o.object_id = c.object_id
198+ AND c.name = columns.COLUMN_NAME
191199 WHERE columns.TABLE_NAME = @0
192200 AND columns.TABLE_SCHEMA = #{ table_schema . blank? ? "schema_name()" : "@1" }
193201 ORDER BY columns.ordinal_position
@@ -227,7 +235,6 @@ def column_definitions(table_name)
227235 end
228236 ci [ :null ] = ci [ :is_nullable ] . to_i == 1 ; ci . delete ( :is_nullable )
229237 ci [ :is_primary ] = ci [ :is_primary ] . to_i == 1
230- ci [ :is_identity ] = ci [ :is_identity ] . to_i == 1
231238 ci
232239 end
233240 end
0 commit comments