一存储过程中从临时表的第二列(不知列名)读出数据,语句有写,明明有数据,读出却显示为空,为何?
表的第二列明明有数据却读出来是空的。也不报错。是不是语句上有什么需要改动的?declare @sql varchar(500)
Create table #B(ttnumb numeric(18,2) null)
select @sql= 'select '+col_name(object_id( 'tempdb.dbo.#LOther '),2)+ ' from #LOther '
insert into #B exec(@sql)
select * from #B
表的第二列明明有数据却读出来是空的。也不报错。是不是语句上有什么需要改动的?declare @sql varchar(500)
Create table #B(ttnumb numeric(18,2) null)
select @sql= 'select '+col_name(object_id( 'tempdb.dbo.#LOther '),2)+ ' from #LOther '
insert into #B exec(@sql)
select * from #B
解决方案 »
- sql server开一个用户问题,(不是简单的加一个登录,然后设置他能访问的数据库)!像一些sql服务商那样给用户开数据库空间!
- 怎么样去掉冗余数据?
- 想学习C#,没有编程的基础,如果入门可以学好呢?有什么书或教程介绍下呢?
- 请教sql语句的二次运算问题~
- 怎样将远程SQL SERVER上的数据库备份到本地机上(不破坏表结构(如主键不丢失))?
- 学FOXPRO到底还有没有用啊?为什么大学课程里都有它啊?
- 存储过程和触发器有什么区别?(一个新手的问题!)
- 数字型为什么不可以留空?
- 十万火急,XP下无法连接SQL,在线等
- 请关于SQL2000打包的问题??
- 急急急 删除某列数据的最后3位的命令怎么写?
- 一道面试题!
SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。临时表有两种类型: 本地临时表
以一个井号 (#) 开头的那些表名。只有在创建本地临时表的连接上才能看到这些表。全局临时表
以两个井号 (##) 开头的那些表名。在所有连接上都能看到全局临时表。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。现在,临时表的许多传统用途可由具有 table 数据类型的变量替换。
1.假如#LOther有2列(a和b),当删除b列之后,再又添加一列b,这时表的结构还是a和b两字段,但col_name(...,2)的值就是null了,col_name(...,3)才能取到b;
2.col_name只能取当前数据库中表的列名,即对于你的例子,由于是临时表在tempdb中,所以只有这样use tempdb select col_name(...)才能取到列名
3.还是用系统表tempdb..syscolumns来取好些
select @sql= ' select '+col_name(object_id( '[Table1]'),2)+ ' from [Table1] '
exec(@sql)
Create table #B(ttnumb numeric(18,2) null)
select * into Lother from #Lother
select @sql= 'select '+col_name(object_id('LOther'),2)+ 'from LOther '
insert into #B exec(@sql)
drop table Lother
select * from #B以上语句是我把数据从临时表又重插入一个表再读,读出来的数据却不是列里的数据,而是列名,是怎么回事?
select @sql= 'select '+col_name(object_id( 'LOther '),2)+ 'from LOther '
==>
select @sql= 'select '+col_name(object_id( 'LOther '),2)+ ' from LOther '
create table #Lother
(col1 int, col2 int, col3 int)insert #Lother
select 1, 2, 3
union all select 4, 5, 6
union all select 7, 8, 9select * into Lother from #Lother GOCreate table #B(ttnumb numeric(18,2) null) declare @sql varchar(500)
select @sql= 'select '+col_name(object_id( 'LOther'),2)+ ' from LOther '
insert into #B exec(@sql) GO select * from #B GO
drop table #Lother
drop table Lother
drop table #Bttnumb
---------------------------------------
2.00
5.00
8.00
不知这里是否有什么问题?
其中#LOther是动态产生的表,列名也是动态的。