当前位置: 首页 > 面试题库 >

SQL IF块代码即使不执行也会导致错误

伍弘盛
2023-03-14
问题内容

我有一个带有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

问题答案:

在执行之前,它仍然会解析并绑定所有内容。它没有绑定到这里。

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



 类似资料:
  • 问题内容: 我正在编写一个(貌似)简单明了的SQL代码段,该代码段在确保该列存在之后将其删除。 问题:如果列不存在,代码 内 IF子句抱怨说,它无法找到列!好了, 卫生署 ,这就是为什么它的IF子句中! 所以我的问题是,为什么不应该执行的一段代码会出现错误? 这是代码段: …这是错误: 我正在使用Microsoft SQL Server 2005 Express Edition。 问题答案: IF

  • 问题内容: 我正在运行一个简单的Calculator应用程序来学习Java的异常处理。我设置了两个要处理的异常:InputMismatchException和ArithmeticException,用于除以零。 ArithmeticException得到处理,并且do-while循环继续。但是在捕获InputMismatchException之后,执行将终止而不是继续循环。 码: 输出: 预期:在

  • 问题内容: 即使执行catch块并抛出第二个Exception,也会在此代码中进行设置? 问题答案: 是的,finally块始终运行…除非以下情况: 运行try-catch-finally块的线程被杀死或中断 你用 基础虚拟机以其他方式被破坏 基础硬件在某种程度上无法使用 另外,如果您的finally块中的方法抛出未捕获的异常,则此后将不执行任何操作(即,该异常将像在其他任何代码中一样被引发)。发

  • 问题内容: 您将如何回答以下问题? Java类的方法包含必须自动执行的代码块。使用适当的伪代码说明如何确保自动执行此代码块 我可以通过制作方法来实现吗.. 然后确保返回get语句: 如果我想增加x的值,我会这样做吗? 问题答案: 答案取决于您对“原子”的定义 我知道以下三个有效定义: 与同步中的原子相同:一次只能有一个线程执行代码; 像ACID中那样是原子的:所有动作/阻止都发生,或没有动作; 原

  • 考虑和<代码>雇员< /代码>和<代码>地址< /代码>关系。在和之间有一对一的映射。以下是模型: 现在,当我执行以下HQL查询时,它会在内部生成两个查询。一个取员工,另一个取地址。 由Hibernate生成的SQL查询 因为我使用的是,所以我希望Hibernate只执行一个带有JOIN的查询,一次性获取员工和地址数据。 你知道为什么它要执行两个查询吗?我如何让Hibernate使用join只执行

  • 我正在尝试根据通用模板生成新的excel文件。我正在打开模板excel文件,编辑它并将其保存在新位置。要编写文件,我正在使用FileOutputStream,并且我在编写后关闭流以保存它。整个过程正常工作,但新创建的excel文件没有正确保存。我的模板文件为35kb,我新创建的excel文件仅显示30kb。当我打开新创建的excel文件时,我可以看到写入的数据,我需要保存并关闭它以反映正确的36k