很抱歉,但我是TSQL的新手,所以我甚至不知道基本的东西。我一直在研究这个函数,但是我遇到了很多语法问题。如果有人可以帮我写这个函数,我会很感激。
1
。我想在尝试删除表之前检查是否存在表
2。我希望在执行drop操作后检查错误
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。我感谢任何花时间回应的人。
答案 0 :(得分:3)
您不能删除具有函数的表:您必须在存储过程中执行此操作。 (函数无法修改数据库。)类似于:
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
答案 1 :(得分:2)
您需要使用EXEC来执行此操作。
在说DROP TABLE的行上,你会这样做:
EXEC('DROP TABLE'+ @TableName)
但我强烈建议不要这样做。任何人都可以将任何表名(或任何其他有效的SQL放在@TableName中(称为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