2017-01-21 6 views
0

Ich habe Schwierigkeiten, eine Abfrage zu erstellen, die alle Informationen aus einer Tabelle (wie SELECT *) zurückgibt, aber ich möchte die Spalte (n), die sind automatisch inkrementellAlle Daten abrufen, aber Spalten weglassen, die auto-increment sind

Grund ist, zeige ich alle Daten (mit SELECT *, weil ich nicht immer weiß, welche Spalten verfügbar sind) in einem Grid-View-Steuerelement, dann öffne ich die Tabelle, damit Updates durchgeführt werden können aus. Dies öffnet jedoch auch die Spalte (n), die als automatisch inkrementell zum Bearbeiten zugewiesen sind, und verhindert, dass die Aktualisierungsabfrage funktioniert.

Bis jetzt habe ich die 'sys.columns.is_identity' Tabelle gefunden, die scheint, dass es in irgendeiner Weise helfen würde, ich bin nur nicht sicher, wie ich das mit einem dynamischen SELECT verwenden könnte. Es sollte beachtet werden, dass die Spalten nicht immer bekannt sind, daher verwende ich SELECT *, um die anfänglich erforderlichen Daten abzurufen.

Antwort

1

Wie Sie erwähnt haben, einzige Weg, dies zu tun, ist sys.columns und dynamische Abfrage mit

DECLARE @col_list VARCHAR(8000) 

SET @col_list = (SELECT ',' + Quotename(c.NAME) 
       FROM sys.columns c 
         JOIN sys.objects o 
          ON c.object_id = o.object_id 
       WHERE o.NAME = 'table_name' 
         AND is_identity <> 1 
       ORDER BY column_id 
       FOR xml path('')) 
SET @col_list = Stuff(@col_list, 1, 1, '') 

EXEC('select '[email protected]_list +' from yourtable') 
Verwandte Themen