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

为什么即使不应该执行,T-SQL块也会给出错误?

江衡
2023-03-14
问题内容

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

这是代码段:

IF exists (select * from syscolumns
    WHERE id=object_id('Table_MD') and name='timeout')
BEGIN
    ALTER TABLE [dbo].[Table_MD]
        DROP COLUMN timeout
END
GO

…这是错误:

Error executing SQL script [...]. Invalid column name 'timeout'

我正在使用Microsoft SQL Server 2005 Express Edition。


问题答案:

IF exists (select * from syscolumns
WHERE id=object_id(‘Table_MD’) and name=’timeout’)
BEGIN
DECLARE @SQL nvarchar(1000)
SET @SQL = N’ALTER TABLE [dbo].[Table_MD] DROP COLUMN timeout’
EXEC sp_executesql @SQL
END
GO


原因:当Sql Server编译代码时,他们检查它是否已使用对象(如果存在)。此检查过程将忽略任何“ IF”,“WHILE”等构造,并仅检查代码中所有使用的对象。



 类似资料:
  • 问题内容: 我有一个带有IF-ELSE块的SQL代码。IF部分中的代码不应该到达,但是在执行SQL时仍然出现错误。在我首先测试链接服务器的代码中,当它失败时,将其设置为1,并且该块应执行并避免需要查询链接服务器的块中的代码,但是出现此错误: 我正在SSMS 2012中运行查询。为什么会发生此错误? -下列插入SQL语句导致错误 问题答案: 在执行之前,它仍然会解析并绑定所有内容。它没有绑定到这里。

  • 我有一个函数,它接收一个字符串参数,并在这个函数中检查这个参数是int还是float。尽管此条件的结果为false,但仍将执行以下行。 我使用PyCharm IDE和Python 3.8 这是代码。 输出:

  • 我一直在研究一些涉及将ASCII值转换为字符串的问题。 如果我使用此代码,我会以的形式输出,这是意料之中的。 但是,如果我这样更改代码: 当我尝试编译它时,会显示以下错误: 两种代码之间的唯一区别是,在第1种代码中,我使用的是t=I‘a’ ,在秒时,<代码>t=t i“a” 。 有人能告诉我第二段有什么问题吗?

  • 为什么即使在Java中使用close()方法,也会出现“Resource leak:”错误? 我把整个代码和注释放在哪里,在哪里得到错误信息,在哪里关闭Scanner方法。 我使用Eclipse,Java13。 这是密码。 甚至当我投入的时候。close()在try块中,仍然显示相同的错误。 即使我把in.close()放在后面,它仍然显示同样的错误。 为什么会这样?

  • 返回位于给定的基于一的行和列索引处的该矩阵的条目。如果行或列不是1或2,则引发异常。 这是我的方法的代码,但即使我使用参数row=1和col=2调用该方法;它显示了IndexOutOfBoundsException。有没有办法解决这个问题?

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