繁体   English   中英

如何编写一个TSQL函数,该函数需要删除表名并删除表

[英]How do I write a TSQL function that takes a table name to drop, and drops a table

抱歉,但是我是TSQL的新手,所以我什至不了解基本知识。 我一直在研究此功能,但一直遇到很多语法问题。 如果有人可以帮助我编写此功能,我将不胜感激。


1.我希望在尝试删除表之前先检查表是否存在
2.我希望执行拖放操作后检查错误
3.我希望它打印出包括表名的状态消息
4.我意识到我不需要打印“无需采取任何措施”,但是无论如何我都将其包括在内,以使任务更具挑战性。
5.我遇到了很多语法错误问题,我不知道该如何清理

CREATE FUNCTION SAFE_DROP_TABLE(@TableName NVARCHAR(30))
AS
BEGIN
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@TableName) AND TYPE IN (N'U'))        
        DROP TABLE @TableName
        IF @@ERROR <> 0 
        BEGIN
            PRINT 'Failed to drop ' + @TableName + ' Error = ' + @@ERROR
        END ELSE BEGIN
            PRINT 'dropped' + @TableName
        END
    ELSE 
        PRINT 'NO ACTION NEEDED'
    END
END

目标:尽可能快地学习TSQL。 我需要查看和编写尽可能多的SQL。 感谢您抽出宝贵时间做出回应。

您不能使用函数删除表:您必须在存储的proc中进行操作。 (函数无法修改数据库。)类似:

CREATE PROCEDURE SAFE_DROP_TABLE(@TableName nvarchar(30))
AS
BEGIN

  IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@TableName) 
     AND TYPE IN (N'U'))            
        EXEC ('DROP TABLE ' + @TableName) -- note change here
        IF @@ERROR <> 0 
        BEGIN
            PRINT 'Failed to drop ' + @TableName + ' Error = ' + @@ERROR
        END ELSE BEGIN
            PRINT 'dropped' + @TableName
        END
    ELSE 
        PRINT 'NO ACTION NEEDED'
    END

END

您将需要使用EXEC来执行此操作。

在显示DROP TABLE的行上,您将执行以下操作:

EXEC('DROP TABLE'+ @TableName)

但是,我强烈建议您不要这样做。 任何人都可以在@TableName中放置任何表名(或任何其他有效的SQL)(称为SQL注入),并引起各种问题。

在深入尝试学习T-SQL语法之前,我会先阅读一些数据库理论。

SQL注入信息:
http://unixwiz.net/techtips/sql-injection.html
http://en.wikipedia.org/wiki/SQL_injection
http://msdn.microsoft.com/en-us/library/ms161953.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM