我被這個人弄糊塗了,希望有人能澄清一下發生了什麼。LINQ-to-SQL .ExecuteCommand()不適用於參數化對象名稱
我想以編程方式禁用使用我的LINQ到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聯機叢書發現和LINQ到SQL文件中這應該只是工作。
我使出這樣做,而不是:
context.ExecuteCommand(String.Format("ALTER TABLE {0} NOCHECK CONSTRAINT {1}", "MyTable", "FK_MyTable_MyOtherTable"));
它的工作原理,但那種失敗)的能夠在參數傳遞給.ExecuteCommand目的(。
那麼,這是LINQ到SQL,SQL Server的一種怪癖嗎?還是我真的很困惑?
任何見解將不勝感激!
感謝您的簡要解釋。非常感激。 –
ALTER TABLE是一種數據定義語言(DDL)類型的語句。所以我認爲LINQ在這裏倒下來是合理的。我沒有看到任何聲稱LINQ是DDL工具。 – rism