日期:2014-05-17  浏览次数:20556 次

'@tbname' 附近有语法错误。

DECLARE @tbname nvarchar(30);
SET @tbname='0exp_corp';
IF OBJECT_ID(@tbname)>0 
DROP TABLE @tbname;



消息 102,级别 15,状态 1,第 4 行
'@tbname' 附近有语法错误。


是为了把MySQL 的DROP TABLE IF EXISTS 0exp_corp 转换为SQL Server查询语句。
但是这里却报错了。
MySQL SQL

------解决方案--------------------
DECLARE @tbname nvarchar(30);
SET @tbname='0exp_corp';
DECLARE @sql NVARCHAR(max)
IF OBJECT_ID(@tbname)>0 
SET @sql='DROP TABLE '+@tbname
EXEC (@sql)
------解决方案--------------------

DECLARE @tbname nvarchar(30);
SET @tbname='0exp_corp';
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@tbname) AND type in (N'U'))
exec (N'DROP TABLE '+@tbname);
GO

------解决方案--------------------
DECLARE @tbname nvarchar(30);
SET @tbname='tb';

IF OBJECT_ID(@tbname, 'u') IS NOT NULL --OBJECT_ID函数应该用IS NOT NULL来判断,且一般加上'U'参考,表示用户表
--DROP TABLE @tbname; --参数查询不能是表名,可以是字段值和top中的数值:select top (@count) @fieldvalue, field2 from tableName where id > @id
EXEC('DROP TABLE '+ @tbname) --任何时候,想让表名动态,就只能拼SQL,用EXEC或up_executesql来执行。
GO