重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1 、
目前创新互联公司已为上千的企业提供了网站建设、域名、雅安服务器托管、绵阳服务器托管、企业网站设计、临猗网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
视图是一个虚拟表,同表一样,视图包含一系列带有名称的列和行数据。
视图在数据库中并不是以数据值存储集形式存在,除非是索引视图。
行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
定义视图可以来自当前或其他数据库的一个或多个表,或者其他视图。
根据以上定义,所以不能使用临时表和表变量。
2、
只要是select 中有function,都会增中计算量,查询时间增长。
楼主,你是讲表名作为参数传进去了吗?“必须声明表变量”好像是说你得表名没获取到,没有错误信息和代码不好确定,不过我跟你同样的错误,我的是表名获取的时候用的#{tableName}改成${tableName}就好了。
可以使用动态sql
如 :exec 'select * from '+@TableNames
还有问题Hi我~
如果仅仅是 为了 指向一个 外部数据库, 使用 数据库 同义词, 来作这个事情就好了.
下面的例子,就是 Test2 数据库, 要访问 Test 数据库的一个表
默认的情况下,要 全名 Test.dbo.v_sale_report_sum
建立 同义词, 可以简化处理。
如果一定要按照楼主的那种处理方式, 那就只有用 动态SQL 来处理了。
1
2 USE [Test2]
3 GO
已将数据库上下文更改为 'Test2'。
1 SELECT * FROM Test.dbo.v_sale_report_sum;
2 go
sale_item sale_money
--------- ----------------------------------------
A 733285.00
C 5738.00
B 2382.00
(3 行受影响)
1 SELECT * FROM v_sale_report_sum;
2 go
消息 208,级别 16,状态 1,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行
对象名 'v_sale_report_sum' 无效。
1 CREATE SYNONYM v_sale_report_sum
2 FOR Test.dbo.v_sale_report_sum;
3 go
1 SELECT * FROM v_sale_report_sum;
2 go
sale_item sale_money
--------- ----------------------------------------
A 733285.00
C 5738.00
B 2382.00
(3 行受影响)
直接将表名也改为varchar(50) 就行了
要不你就用预执行
if exists(select * from sysobjects where name='proc_select')
drop proc proc_select
go
create proc proc_select
@table varchar(50)
as
declare @sql varchar(8000)
set @sql='select * from '+@table
exec(@sql)
go
exec proc_select 'Types'
局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的);
申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;
赋值:有两种方法式(@num为变量名,value为值)
set @num=value; 或 select @num=value;
如果想获取查询语句中的一个字段值可以用select给变量赋值,如下:
select @num=字段名 from 表名 where ……
全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。