Sql server 2005 检查表变量是否存在?

Sql server 2005 检查表变量是否存在?,sql-server-2005,Sql Server 2005,我搜索了StackOverFlow,但没有找到 有没有办法让我知道表变量是否已经存在 比如: IF OBJECT_ID('tempdb..#tbl') IS NOT NULL DROP TABLE #tbl 但是对于表变量…表变量,因为它们是变量,不同于临时表或非临时表,因为它们不是创建的,而是声明的。在这方面,它们更接近“正常”变量,而不是表 因此,谈论一个表变量的存在和谈论任何变量的存在一样有意义:如果您在源代码中声明了这个东西,那么它从这一点一直存在到它的作用域结束,在

我搜索了StackOverFlow,但没有找到

有没有办法让我知道表变量是否已经存在

比如:

 IF OBJECT_ID('tempdb..#tbl') IS NOT NULL
        DROP TABLE #tbl

但是对于表变量…

表变量,因为它们是变量,不同于临时表或非临时表,因为它们不是创建的,而是声明的。在这方面,它们更接近“正常”变量,而不是表

因此,谈论一个表变量的存在和谈论任何变量的存在一样有意义:如果您在源代码中声明了这个东西,那么它从这一点一直存在到它的作用域结束,在SQL Server中,它被称为批处理或它在其中声明的存储过程/函数。如果您还没有声明变量,并且试图在代码中引用它,那么您的代码将无法编译,从而使任何存在性检查变得毫无意义(如果可能的话)


也许,如果您觉得需要在脚本中删除和重新创建/声明一个表变量,那么您可能应该考虑使用临时表来代替。

< P>表变量,因为它们是变量,与临时表或非临时表不同,因为它们不是被创建的——它们被声明。在这方面,它们更接近“正常”变量,而不是表

因此,谈论一个表变量的存在和谈论任何变量的存在一样有意义:如果您在源代码中声明了这个东西,那么它从这一点一直存在到它的作用域结束,在SQL Server中,它被称为批处理或它在其中声明的存储过程/函数。如果您还没有声明变量,并且试图在代码中引用它,那么您的代码将无法编译,从而使任何存在性检查变得毫无意义(如果可能的话)


也许,如果您觉得需要在脚本中删除并重新创建/声明一个表变量,那么您可能应该考虑使用一个临时表来代替。

< P>我知道这是一个老线程,但希望这可以帮助在这里着陆的人。从SSMS开发时,您可能需要重新运行一条语句,该语句将select放入表变量中,例如select*从dbName.schema.Foo中放入tblvarFoo。但是,第二次运行它时,您会得到一个错误,即它已经存在。所以,你决定先放弃它。但接下来,你就遇到了OP的问题:

在我删除一个表之前,我应该检查它是否存在,否则我会 得到一个例外

您不必删除表变量或检查其是否存在。
只需在查询窗口中右键单击重新连接,然后选择连接->更改连接。。。与以前相同的服务器/db。

我知道这是一个旧线程,但希望这可能会对登陆这里的人有所帮助。从SSMS开发时,您可能需要重新运行一条语句,该语句将select放入表变量中,例如select*从dbName.schema.Foo中放入tblvarFoo。但是,第二次运行它时,您会得到一个错误,即它已经存在。所以,你决定先放弃它。但接下来,你就遇到了OP的问题:

在我删除一个表之前,我应该检查它是否存在,否则我会 得到一个例外

您不必删除表变量或检查其是否存在。 只需在查询窗口中右键单击重新连接,然后选择连接->更改连接。。。与以前相同的服务器/db。

表变量@Table与临时表略有不同。 表变量@Table需要声明,而临时表应该创建。 所以根据定义,声明变量存在于其定义的范围Begin和End语句之间。所以不需要删除表变量

但如果您想删除/删除一个表变量,可以使用delete@table语句。

表变量@table与临时表略有不同。 表变量@Table需要声明,而临时表应该创建。 所以根据定义,声明变量存在于其定义的范围Begin和End语句之间。所以不需要删除表变量


但是,如果要删除/删除表变量,可以使用delete@table语句。

您是在询问表变量还是临时表?这些是不同的事情。考虑到表变量在批处理中的作用域,并且在批处理完成后不在作用域内,您是否需要知道这一点?您是在询问表变量还是临时表?这些是不同的事情。有没有必要知道这一点,因为表变量的作用域是针对批处理的,并且在批处理完成后就不在作用域内了?在我删除表之前,我应该检查它是否存在,否则-我会得到异常……@RoyiNamir:是的,当然,我没有这么说。我的观点是,表变量不适合删除/重新创建/存在性检查,但临时表是。如果要删除/重新创建临时行集
在您的代码中,使用临时表而不是表变量。+1每当输入包含表变量声明的作用域时,它们都会隐式创建。在删除表之前,我应该检查它是否存在,否则-我将得到异常……@RoyiNamir:是的,当然,我没有这么说。我的观点是,表变量不适合删除/重新创建/存在性检查,但临时表是。如果要在代码中删除/重新创建临时行集,请使用临时表而不是表变量。+1只要输入包含表变量声明的范围,就会隐式创建临时表。