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

ChinaXtHuLang 2013-08-28 03:58:50
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。。

大侠们帮忙看下,那个存储过程为什么会提示错误啊。应该怎么写啊?
...全文
354 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaXtHuLang 2013-08-28
  • 打赏
  • 举报
回复 1
CSDN越来越破了。。我用IE,360,搜狗,居然那个代码太长把给分的文本框挡住了。使用火狐就行了。我晕
ChinaXtHuLang 2013-08-28
  • 打赏
  • 举报
回复
1楼的。你在随便发1贴吧。我不知道为什么不能给你分。看不到那个文本框。
ChinaXtHuLang 2013-08-28
  • 打赏
  • 举报
回复
谢谢两位,结贴
---涛声依旧--- 2013-08-28
  • 打赏
  • 举报
回复
DROP TABLE [dbo].[@T] --楼主这里是变量,当然会报错了 请用exec @sql的形式
Shawn 2013-08-28
  • 打赏
  • 举报
回复
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'

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧