SSI*_*Off 8 sql t-sql stored-procedures
我创建了一个存储过程,如果表存在于数据库中,它将删除该表.使用EXEC运行存储过程时,我收到以下错误:
消息203,级别16,状态2,过程sp_DropIfExists,行13名称'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'table_name')AND type =(N'U'))DROP TABLE [table_name ]'不是有效的标识符.
但是,如果我将生成的T-SQL复制并粘贴到管理工作室,它似乎运行正常.有人能解释为什么这是无效的吗?修复会很好,但我真的是在主要为什么之后,尽管如此会更好!提前致谢.
ALTER PROCEDURE [dbo].[sp_DropIfExists](@tableName VARCHAR(255))
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL VARCHAR(MAX);
SET @SQL = 'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N''' + @tableName + ''') AND type = (N''U'')) DROP TABLE [' + @tableName + ']'
PRINT @SQL;
EXEC @SQL;
END
Run Code Online (Sandbox Code Playgroud)
小智 5
--ALTER (if procedure exists)
CREATE PROCEDURE sp_dropifexists (@tableName VARCHAR(255))
AS
BEGIN
DECLARE @SQL VARCHAR(MAX);
SET @SQL = 'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N''' + @tableName + ''') AND type = (N''U'')) DROP TABLE [' + @tableName + ']'
--if write EXEC @SQL without parentheses sql says Error: is not a valid identifier
EXEC (@SQL);
END
--test procedure
exec sp_DropIfExists 'table'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22684 次 |
最近记录: |