sp_executesql参数中的T-SQL对象引用

时间:2015-12-10 13:54:43

标签: sql sql-server visual-studio tsql

我正在TFS控制下在VS2013中编写T-SQL。

我已经使用sp_executesql来获取MINMAX&动态语句的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出现细!

请告知错误的可能原因/解决方案。

1 个答案:

答案 0 :(得分:3)

您可以明确指定架构:

EXEC [dbo].[sp_executesql]  @SQLStmt,...

在不同的模式中,您有两个具有相同名称sp_executesql的存储过程。您不应该使用sp_前缀命名用户定义的存储过程:

  

在命名过程时避免使用sp_前缀。这个前缀是   SQL Server用于指定系统过程。使用前缀   如果存在系统过程,可能导致应用程序代码中断   同名。