首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程内判断表是否存在有关问题

2013-09-05 
存储过程内判断表是否存在问题Alter PROC ExistsTab(@T NVARCHAR(50))ASIF EXISTS (SELECT *FROMdbo.sysob

存储过程内判断表是否存在问题
Alter PROC ExistsTab(@T NVARCHAR(50))
AS
    IF EXISTS (SELECT *
               FROM   dbo.sysobjects
               WHERE  id = Object_id(N'[dbo].[' + @T + ']')
                      AND Objectproperty(id, N'IsUserTable') = 1)
      -- 删除表
      DROP TABLE [dbo].[@T]

GO



执行:
exec ExistsTab 'a'
提示错误:
无法 除去 表 'dbo.@T',因为它在系统目录中不存在。


直接使用:
IF EXISTS (SELECT *
               FROM   dbo.sysobjects
               WHERE  id = Object_id(N'[dbo].[a]')
                      AND Objectproperty(id, N'IsUserTable') = 1)
      -- 删除表
      DROP TABLE [dbo].[a]
OK。。

大侠们帮忙看下,那个存储过程为什么会提示错误啊。应该怎么写啊?

[解决办法]

ALTER PROC ExistsTab(@T NVARCHAR(50))
AS
    IF EXISTS (SELECT *
               FROM   dbo.sysobjects
               WHERE  id = Object_id(N'[dbo].[' + @T + ']')
                      AND Objectproperty(id, N'IsUserTable') = 1)
      -- 删除表
      EXEC('DROP TABLE [dbo].' + @t)--drop table 语法不支持变量

GO



exec ExistsTab 'a'


[解决办法]
DROP TABLE [dbo].[@T] --楼主这里是变量,当然会报错了
请用exec @sql的形式

热点排行