Ich möchte eine Liste von Spalten in SQL Server 2005 erstellen, die Identitätsspalten und ihre entsprechende Tabelle in T-SQL haben.
Die Ergebnisse würden etwa so aussehen:
Tabellenname, Spaltenname
Ich möchte eine Liste von Spalten in SQL Server 2005 erstellen, die Identitätsspalten und ihre entsprechende Tabelle in T-SQL haben.
Die Ergebnisse würden etwa so aussehen:
Tabellenname, Spaltenname
Verwenden Sie diese :
DECLARE @Table_Name VARCHAR(100)
DECLARE @Column_Name VARCHAR(100)
SET @Table_Name = ''
SET @Column_Name = ''
SELECT RowNumber = ROW_NUMBER() OVER ( PARTITION BY T.[Name] ORDER BY T.[Name], C.column_id ) ,
SCHEMA_NAME(T.schema_id) AS SchemaName ,
T.[Name] AS Table_Name ,
C.[Name] AS Field_Name ,
sysType.name ,
C.max_length ,
C.is_nullable ,
C.is_identity ,
C.scale ,
C.precision
FROM Sys.Tables AS T
LEFT JOIN Sys.Columns AS C ON ( T.[Object_Id] = C.[Object_Id] )
LEFT JOIN sys.types AS sysType ON ( C.user_type_id = sysType.user_type_id )
WHERE ( Type = 'U' )
AND ( C.Name LIKE '%' + @Column_Name + '%' )
AND ( T.Name LIKE '%' + @Table_Name + '%' )
ORDER BY T.[Name] ,
C.column_id
Dies funktionierte für SQL Server 2005, 2008 und 2012. Ich stellte fest, dass die sys.identity_columns nicht alle meine Tabellen mit Identitätsspalten enthielt.
SELECT a.name AS TableName, b.name AS IdentityColumn
FROM sys.sysobjects a
JOIN sys.syscolumns b
ON a.id = b.id
WHERE is_identity = 1
ORDER BY name;
Auf der Dokumentationsseite kann auch die Statusspalte verwendet werden. Sie können auch den vierteiligen Bezeichner hinzufügen, der auf verschiedenen Servern funktioniert.
SELECT a.name AS TableName, b.name AS IdentityColumn
FROM [YOUR_SERVER_NAME].[YOUR_DB_NAME].sys.sysobjects a
JOIN [YOUR_SERVER_NAME].[YOUR_DB_NAME].sys.syscolumns b
ON a.id = b.id
WHERE is_identity = 1
ORDER BY name;
Quelle: https://msdn.microsoft.com/en-us/library/ms186816.aspx
Aus irgendeinem Grund Sql-Server speichern einige Identität Spalten in verschiedenen Tabellen, der Code, der für mich arbeiten, ist die folgende:
select TABLE_NAME tabla,COLUMN_NAME columna
from INFORMATION_SCHEMA.COLUMNS
where COLUMNPROPERTY(object_id(TABLE_SCHEMA+'.'+TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
union all
select o.name tabla, c.name columna
from sys.objects o
inner join sys.columns c on o.object_id = c.object_id
where c.is_identity = 1
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.