[英]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.