加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【软件技术】关于sql中表名作为变量

(2014-07-26 11:10:54)
标签:

sql

it

分类: 软件技术
一段存储过程语句,想让表名作为变量,代码如下:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE  proc [dbo].[abc]
@tablename  varchar(20)
AS
BEGIN
SET NOCOUNT ON;
select * from @tablename 
END
GO

执行显示如下错误:
消息 156,级别 15,状态 1,第 2 行
关键字 'proc' 附近有语法错误。
消息 1087,级别 15,状态 2,第 7 行
必须声明表变量 "@tablename"。

百度了一下,原来表名不能作为变量,想想也对,不同的表有不同的字段,如果让表名作为变量,字段是不可预知的,如果让表名作为变量,不合逻辑。

如何解决呢?

大家说要用动态的SQL语句,什么是动态的SQL语句呢?就是构造一个可以执行的“SQL命令字符串”。
然后用exec执行这个名称串。

代码修改为:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE  proc [dbo].[abc]
@tablename  varchar(20)
AS
BEGIN
declare @sqlcommand varchar(max)     --sql名称串变量
        set @sqlcommand ='select * from '+@tablename  --构造这个字符串     
        exec(@sqlcommand )    --执行sql命令
END
GO











0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有