存储过程内判断表是否存在问题
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