Я немного сбит с толку этим и надеюсь, что кто-то сможет прояснить, что происходит.
Я бы хотел программно отключить ограничение внешнего ключа, используя мой контекст данных LINQ-to-SQL. Казалось бы, это должно быть так просто:
context.ExecuteCommand( "ALTER TABLE {0} NOCHECK CONSTRAINT {1}", "MyTable", "FK_MyTable_MyOtherTable" );
К сожалению, этот код бомбит с ошибкой SQL "Неверный синтаксис рядом с '@ p0'."
Когда я запускаю профилировщик, я вижу, что генерируется SQL:
exec sp_executesql
N'ALTER TABLE @p0 NOCHECK CONSTRAINT @p1',
N'@p0 varchar(4000),@p1 varchar(4000)',
@p0=N'MyTable',
@p1=N'FK_MyTable_MyOtherTable'
Из всего, что я могу найти в SQL Books Online и в документации по LINQ-to-SQL, это должно сработать.
Вместо этого я прибегнул к этому:
context.ExecuteCommand( String.Format( "ALTER TABLE {0} NOCHECK CONSTRAINT {1}", "MyTable", "FK_MyTable_MyOtherTable" ) );
Это работает, но в некотором роде лишает цели возможности передавать параметры в .ExecuteCommand ().
Так это какая-то странность в LINQ-to-SQL, SQL Server или я просто очень запутался?
Любые идеи будут высоко оценены!