2010-09-23 2 views
0

У меня есть база данных MS SQL Server с примерно 75 таблицами, и я пытаюсь вставить записи в таблицы, если запись с тем же самым первичным ключом не существует или обновляется, если они это делают. Я мог бы жестко закодировать первичные ключи для каждой таблицы в свой код vb.net, но я бы предпочел, чтобы не было добавлено больше таблиц позднее, и мой код должен обрабатывать это без изменения. Есть ли способ вытащить имена столбцов первичного ключа из таблицы с помощью запроса, чтобы я мог циклически перебирать каждую таблицу с тем же кодом?Как вывести имя столбца первичного ключа таблицы MS SQL Server?

Спасибо, Том

P.S. Я немного новичок, когда дело доходит до SQL, поэтому, если у вас есть время, пожалуйста, прост и понятен с любыми ответами.

ответ

1

Посмотрите Find Tables With Primary Key Constraint in Database

SELECT i.name AS IndexName, 
     OBJECT_NAME(ic.OBJECT_ID) AS TableName, 
     COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName 
FROM sys.indexes AS i INNER JOIN 
     sys.index_columns AS ic ON i.OBJECT_ID = ic.OBJECT_ID 
           AND i.index_id = ic.index_id 
WHERE i.is_primary_key = 1 
0

Существует более простой способ сделать это. Это называется ADO.NET :)

В принципе, для получения данных из вашей БД вам понадобится DataAdapter. DataSet. Затем вы добавляете, изменяете или удаляете строки в DataTable в DataSet, и когда вы будете готовы к передаче в БД, вы скажете DataAdapter. DataSet может отслеживать внесенные в него изменения, а DataAdapter знает, какую инструкцию использовать в зависимости от свойства строки/записи RowState.

См. here как извлекать и изменять данные с использованием ADO.NET.