在SQL SERVER 中使用EXEC语句时出错,请指导!

DECLARE @Ctb VARCHAR(10)
SET @Ctb='hhh'
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[hhh]') AND type in (N'U'))
--为何使用下面一句代替上面一句就会出错?如何修改
--EXEC('IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID([dbo].['+@Ctb+']) AND type in (N''U''))')
EXEC('DROP TABLE '+ @Ctb)
--在线等高手指导~

第1个回答  2012-11-22
EXEC('IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID([dbo].['+@Ctb+']) AND type in (N''U''))')

这个语句中的IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID([dbo].['+@Ctb+']) AND type in (N''U''))后面缺少语句,一般IF EXISTS ()后面都是有语句的追问

后面有语句啊:
EXEC('DROP TABLE '+ @Ctb)

追答

那是在exec之外的

第2个回答  2012-11-22
EXEC('IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID([dbo].['+@Ctb+']) AND type in (N''U'')) drop table '+@ctb)
你写全就好了追问

--使用以下语句:
EXEC('IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID([dbo].['+@Ctb+']) AND type in (N''U'')) drop table '+@ctb)
--提示错误信息:
--无法绑定由多个部分组成的标识符 "dbo.hhh"。

追答

没加单引号object_id()方法中
EXEC('IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(''[dbo].['+
@Ctb+']'') AND type in (N''U'')) drop table '+@ctb)

本回答被提问者和网友采纳
相似回答
大家正在搜