我正在TFS控制下在VS2013中编写T-SQL。
我已经使用sp_executesql
来获取MIN
,MAX
&动态语句的COUNT
输出。这是我的SP中sp_executesql
的三个此类用法中的第3个,所有这些用途都使用输出参数,并且运行正常。
然而,由于未解决的引用问题SQL71502,VS2013现在拒绝构建SP:
对象不存在或引用是ambiguouse,因为它可以引用以下任何对象: [dbo]。[sp_executesql]。[@ RunValueTo] 或 的 [MYSCHEMA]。[sp_executesql的]。[@ RunValueTo] 即可。
这是抛出此错误的唯一变量(@RunValueTo
) - 使用sp_executesql
或其他任何一种用途时,任何其他变量/参数都没有其他错误
这是代码段:
DECLARE @SQLStmt NVARCHAR(MAX)=N''
DECLARE @SQLParamDef NVARCHAR(MAX)=N''
DECLARE @CurrentKeyField NVARCHAR(200)=N''
DECLARE @CurrentTargetName NVARCHAR(200)=N'MyTableName'
DECLARE @CurrentRunValueFrom INT=0
DECLARE @CurrentRunValueTo INT=0
DECLARE @CurrentTargetRunCount INT=0
SET @SQLStmt=N'SELECT @RunValueFrom=MIN('+@CurrentKeyField+
N'), @RunValueTo=MAX('+@CurrentKeyField+
N'), @RunCount=COUNT('+@CurrentKeyField+
N') FROM [MyDB].[MySchema].'+@CurrentTargetName
SET @SQLParamDef=N'@RunValueFrom INT OUTPUT, @RunValueTo INT OUTPUT, @RunCount INT OUTPUT'
EXEC sp_executesql @SQLStmt, @SQLParamDef, @RunValueFrom=@CurrentRunValueFrom OUTPUT, @RunValueTo=@CurrentRunValueTo OUTPUT, @RunCount=@CurrentTargetRunCount OUTPUT
此代码在其自身运行正常(假设我输入了有效的数据库和模式名称)。
我已尝试清理项目,关闭解决方案,然后重新启动电脑。
我还尝试更改参数的顺序,因此@RunValueTo
是第一个而不是第二个参数,但我在@RunValueTo
上出现相同的错误 - @RunValueFrom
出现细!
请告知错误的可能原因/解决方案。
答案 0 :(得分:3)
您可以明确指定架构:
EXEC [dbo].[sp_executesql] @SQLStmt,...
在不同的模式中,您有两个具有相同名称sp_executesql
的存储过程。您不应该使用sp_
前缀命名用户定义的存储过程:
在命名过程时避免使用sp_前缀。这个前缀是 SQL Server用于指定系统过程。使用前缀 如果存在系统过程,可能导致应用程序代码中断 同名。