Jak*_*ter 4 .net c# t-sql sql-server-2008 linq-to-sql
我对此感到有点沮丧,并希望有人能澄清发生了什么.
我想使用我的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'
Run Code Online (Sandbox Code Playgroud)
从我在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中是一种什么样的怪癖,还是我真的很困惑?
任何见解将不胜感激!
正如您所知 - Linq-to-SQL将非常积极地尝试参数化您的查询.在大多数情况下,这是一件好事.
但是在ALTER TABLE...
语句的情况下,诸如表名等之类的东西不能被参数化 - 因此,它失败了.
我不知道是否有任何办法让Linq-to-SQL 不参数化要执行的某些查询ExecuteCommand
- 同时,我认为,这些语句不涉及操纵数据(插入,更新等)而是操纵数据库的结构,最好的String.Format(...)
办法是在调用之前使用该方法将实际的SQL查询作为字符串.ExecuteCommand()
.
归档时间: |
|
查看次数: |
3760 次 |
最近记录: |