我有这个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#
中对其进行参数化答案 0 :(得分:3)
解决方案是您需要在查询中使用@object,但是当您在C#中设置参数时,您可以定义类型:
System.Data.SqlDbType.NVarChar
这将使您不必使用N前缀。
需要注意的另一件事是你要使用"."
而不是'.'
因为它们是两个不同的东西:string和char。