'附近的语法无效。'即使在c#中使用参数

时间:2016-04-14 20:27:23

标签: c# sql-server sql-server-2008

我有这个SQL查询:

Select distinct
    cols.referenced_entity_name 
from  
    sys.sql_expression_dependencies objs   
outer apply
    sys.dm_sql_referenced_entities (OBJECT_SCHEMA_NAME(objs.referencing_id) + N'.' + object_name(objs.referencing_id), N'OBJECT') as cols 
where  
    objs.referencing_id = object_id('viewname')

这会返回给定视图的依赖项列表

此查询适用于SQL。但是当我把它放到c#类中时

Select distinct 
    cols.referenced_entity_name as depedency
from
    sys.sql_expression_dependencies objs 
outer apply
    sys.dm_sql_referenced_entities (OBJECT_SCHEMA_NAME(objs.referencing_id) + N@period + object_name(objs.referencing_id), N@object ) as cols 
where 
    objs.referencing_id = object_id(@view)

参数为@period = .@object = OBJECT且@view = viewname,我收到异常

  

'附近的语法无效。'

我原本没有过'。'作为一个参数,并通过它发送它。'。但它也拒绝了这一点(我逃过了这样的'。\'因此结果字符串只是'。')

有点难以理解我能做些什么才能使查询正常工作...正如我所说,如果我只是在SQL Server Management Studio中运行它,它可以正常工作。

我愿意接受另一个查询,以便从Determine table referenced in a view in SQL Server

获取此查询,从而获得相同的结果

它返回我正在寻找的是一个返回视图依赖关系的查询,正如我所说它在查询分析器中工作但是当它通过C#中的SqlCommand对象传递时无法运行

EDIT ::

好的,我挖掘了上面查询中引用的视图,对于我的生活,我无法弄清楚为什么这个查询不会给我相同的结果

  Select referenced_entity_name as dependancy from sys.sql_expression_dependencies where referencing_id = object_id('viewname')

据我所知,它给我的结果更清晰,查询更清晰,但我并不是系统视图中的专家。

任何人都可以告诉我他们是否认为这应该给我同样的结果?

因为如果它确实消除了对N'的需求。这让我感到悲痛,试图在c#

中对其进行参数化

1 个答案:

答案 0 :(得分:3)

解决方案是您需要在查询中使用@object,但是当您在C#中设置参数时,您可以定义类型:

System.Data.SqlDbType.NVarChar

这将使您不必使用N前缀。

需要注意的另一件事是你要使用"."而不是'.'因为它们是两个不同的东西:string和char。