Так я бегу утилиту SqlRestore, созданную AppHarbor, который можно найти здесь:Удаление записей из всех таблиц, что здесь не так?
https://github.com/appharbor/AppHarbor-SqlServerBulkCopy
Первый шаг утилиты стереть данные из базы данных назначения, используя следующие команды:
// http://stackoverflow.com/questions/155246/how-do-you-truncate-all-tables-in-a-database-using-tsql/156813#156813
StringBuilder commandBuilder = new StringBuilder();
commandBuilder.Append(
@"
-- disable all constraints
EXEC sp_msforeachtable ""ALTER TABLE ? NOCHECK CONSTRAINT all""
-- delete data in all tables
EXEC sp_msforeachtable ""DELETE FROM ?""
-- enable all constraints
exec sp_msforeachtable ""ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all""
");
Когда я запускаю это (как с помощью программы, а также вручную с помощью Management Studio), удаления утверждение бросает ошибку говоря invalid column name schoolid
В первой, я понятия не имел, какая таблица была метание ошибки, поэтому я переписал удаления шаг курсора, как показано здесь:
declare tableCursor cursor local forward_only for
select [name]
from sys.objects
where [type] = 'U'
declare @tableName varchar(50)
open tableCursor
fetch next from tableCursor into @tableName
while (@@FETCH_STATUS = 0) begin
print 'trying to delete from ' + @tableName
exec('delete from ' + @tableName)
print 'deleted from ' + @tableName
fetch next from tableCursor into @tableName
end
close tableCursor
deallocate tableCursor
Выполнение сценария так говорит мне, что это был «пытается удалить из таблицы X ", но когда я посмотрю на определение таблицы таблицы X, этот столбец НЕ СУЩЕСТВУЕТ (и никогда не имеет)!
Итак, я решил просто вручную удалить таблицу, а затем сравнить VS Sql Server Schema с тем, чтобы сгенерировать таблицу в моей целевой базе данных, поскольку она была как-то повреждена.
Как только он будет сгенерирован, я заново запустил этот скрипт удаления, И ЭТО ПРОДОЛЖАЕТ ОШИБКУ!
Вот определение таблицы:
CREATE TABLE [dbo].[TourneyPoolMatchResult] (
[TourneyPoolMatchResultId] INT IDENTITY (1, 1) NOT NULL,
[TournamentTypeId] INT NOT NULL,
[WinningWrestlerId] INT NOT NULL,
[LosingWrestlerId] INT NOT NULL,
[WinType] VARCHAR (5) NOT NULL,
[Score] VARCHAR (20) NULL,
[BonusPoints] DECIMAL (2, 1) NOT NULL,
[AdvancementPoints] DECIMAL (2, 1) NOT NULL,
[PlacementPoints] INT NOT NULL,
[LosingWrestlerPlacementPoints] INT NOT NULL,
PRIMARY KEY CLUSTERED ([TourneyPoolMatchResultId] ASC)
);
GO
CREATE trigger [dbo].[trg_TourneyPoolMatchResult_Change]
on [dbo].[TourneyPoolMatchResult]
after insert, update, delete
as
exec [UpdateTeamPoints];
exec [UpdatePointsForSubmittal];
Как вы можете видеть, нигде в том, что определение таблицы делает это что-нибудь о SchoolId.
Что происходит в мире?
Вы используете инструкцию delete, и у вас есть триггеры при удалении. Возможно, ваша функция триггера (например, «UpdateTeamPoints» или «UpdatePointsForSubmittal») ссылается на столбец с именем schoolid? Найдите свой код sql, есть ли какой-нибудь «школьник»? –
А, хорошо, позвольте мне проверить ... – ganders
Да, это было, пожалуйста, добавьте в качестве ответа, чтобы я мог дать вам кредит. – ganders