首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何参数化删除表的T-SQL存储过程?

如何参数化删除表的T-SQL存储过程?
EN

Stack Overflow用户
提问于 2009-07-09 01:04:36
回答 3查看 2.2K关注 0票数 2

我想要一个简单的存储过程来删除表。这是我的第一次尝试:

代码语言:javascript
复制
CREATE PROC bsp_susf_DeleteTable (@TableName char)
AS
IF EXISTS (SELECT name FROM sysobjects WHERE name = @TableName)
BEGIN
DROP TABLE @TableName
END

当我在MS Query Analyser中解析它时,我得到以下错误:

代码语言:javascript
复制
Server: Msg 170, Level 15, State 1, Procedure bsp_susf_DeleteTable, Line 6
Line 6: Incorrect syntax near '@TableName'.

这在某种意义上是有意义的,因为单个表的正常SQL是:

代码语言:javascript
复制
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'tbl_XYZ')
BEGIN
    DROP TABLE tbl_XYZ
END

注tbl_XYZ的第一个实例(在WHERE子句中)用单引号括起来,而DROP语句中的第二个实例没有单引号。如果我使用一个变量(@TableName),那么我就无法做出这样的区分。

那么,可以创建一个存储过程来实现这一点吗?或者我必须复制如果存在..。到处都是?

EN

Stack Overflow用户

回答已采纳

发布于 2009-07-09 01:09:40

您应该能够使用动态sql:

代码语言:javascript
复制
declare @sql varchar(max)
if exists (select name from sysobjects where name = @TableName)
BEGIN
   set @sql = 'drop table ' + @TableName
   exec(@sql)
END

希望这能有所帮助。

更新:是的,你可以让@sql变得更小,这只是一个简单的例子。还要注意有关SQL注入攻击的其他注释

票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1101331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档