【问题标题】:SQL IF block code causing error even though it shouldn't executeSQL IF 块代码导致错误,即使它不应该执行
【发布时间】:2014-01-24 02:04:09
【问题描述】:

我有一个带有 IF-ELSE 块的 SQL 代码。 IF 部分的代码不应该到达,但是当 SQL 执行时我仍然得到一个错误。在我首先测试链接服务器的代码中,当失败时,@reval 设置为 1,ELSE 块应该执行并避免 IF 块中需要查询链接服务器的代码,但是我收到此错误:

Msg -1, Level 16, State 1, Line 0 SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].

我在 SSMS 2012 中运行查询。 为什么会出现这个错误?

declare @clientCode VARCHAR(7)
set @clientCode = '8001299'
declare @year INT
set @year = 2013

DECLARE @retVal INT        
-- test connectivity with linked database server
BEGIN TRY
       EXEC @retVal = sys.sp_testlinkedserver N'ATLAS'  
END TRY
BEGIN CATCH
       SET @retval = SIGN(@@ERROR)
END CATCH

IF @retval = 0 -- connection attempt successful 
BEGIN

--以下插入 SQL 语句导致错误

        SET @contIndex = (SELECT ContIndex FROM ATLAS.Engine_sp.dbo.tblEngagement WHERE ClientCode = @clientCode)          
END
ELSE -- could not connect 
BEGIN
       -- execute code to pull from linked server 
END

【问题讨论】:

  • 90% 的发布代码是不相关的。将其减少到证明问题所需的最低限度。阅读SSCCE
  • @Bohemian - 你本可以给出你的建议而不是投反对票。
  • 我投了反对票,因为没有努力诊断问题。您基本上粘贴了整个代码和错误,并要求我们调试您的代码。这不是这个网站的工作方式。我之前的建议仍然有效。如果您遵循它,您可能会自己解决问题。
  • @Bohemian - 我知道这个网站是如何运作的,我不会在没有事先研究的情况下提问,也不需要任何人来调试我的代码。我只是想要一些建议。
  • @Bohemian - 谢谢。

标签: sql sql-server sql-server-2012 linked-server ssms-2012


【解决方案1】:

它仍然会在执行之前解析和绑定所有内容。此处绑定失败。

您可以使用sp_executesql 来执行该行,并且它应该只在实际调用sp_executesql 时进行验证。

【讨论】:

  • 谢谢,我没有意识到这一点。我将有问题的 SQL 修改为传递给 sp_executesql 过程的 VARCHAR 变量,现在它可以工作了。
猜你喜欢
  • 2010-09-12
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 2023-03-28
  • 2013-10-21
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
相关资源
最近更新 更多