Пожалуйста, проверьте мой ответ ниже
transaction = con.BeginTransaction();
string query1 ="Insert Into ABC(NewsCode,Comment) output INSERTED.ID Values (@NewsCode,@Comment)";
cmd = db.GetSqlStringCommand(query1);
cmd.Transaction = transaction;
cmd.Connection = con;
db.AddInParameter(cmd, "NewsCode", DbType.Int32, News.NewsCode);
db.AddInParameter(cmd, "Comment", DbType.String,News.Comment);
int modifiedRowId =(int)cmd.ExecuteScalar();
У меня нет базы данных сразу под рукой для тестирования этого, но необходимо смочь видеть, существует ли столбец в индексе при помощи следующего ЕСЛИ оператор EXISTS.
Я не уверен, можно ли изменить индекс на лету.
IF EXISTS
(
SELECT MyIndex.Name AS IndexName,
Columns.name AS ColumnName
FROM sys.indexes MyIndex
INNER JOIN sys.index_columns IndexColumns
ON MyIndex.index_id = IndexColumns.index_id
AND MyIndex.object_id = IndexColumns.object_id
INNER JOIN sys.columns Columns
ON Columns.column_id = IndexColumns.column_id
AND IndexColumns.object_id = Columns.object_id
WHERE Columns.name = 'ColumnName'
AND MyIndex.Name='IX_MyIndexName'
)
Спасибо за Вашу справку, Ed. Вот решение, которое я записал использованию Ваш как запуск. Это было проверено. В основном это имеет все корректные соединения.
IF EXISTS
(
SELECT i.Name AS IndexName, c.Name AS ColumnName
FROM sys.indexes i
JOIN sys.index_columns ic
ON i.object_id = ic.object_id AND i.index_id = ic.index_id
JOIN sys.columns c
ON ic.object_id = c.object_id AND c.column_id = ic.column_id
WHERE c.Name = 'MyColumnName' AND i.Name='MyIndexName'
)