2014-09-26 61 views
1

我对SQL很陌生。更熟悉程序编程随着静态值插入多行

我目前有局部变量,例如在循环内改变的名称。但是,我也执行一个返回许多行的函数。现在我循环遍历每一行以将值插入到结果表中。

当我有多行时,如何在包含值(名称,cname,val1,val2) 的表格中放置日期?

例如案例:

set @name = 'test' 
select cname, val1, val2 from myfunc(@name) 

回报:

----------------------- 
| cname | val1 | val2 | 
------------------------ 
|'atest'| 1.3 | 42.0 | 
|'btest'| 1.58 | 6.87 | 
------------------------ 

,我想结果表(@restable)是:

----------------------------- 
name | cname | val1 | val2 | 
----------------------------- 
'test'|'atest'| 1.3 | 42.0 | 
'test'|'btest'| 1.58 | 6.87 | 
------------------------------ 

说明我还需要@restable在此操作之后获取更多声明。

+2

'选择@name,CNAME,VAL1,VAL2从myfunc(@name)' – Tom 2014-09-26 15:03:57

+1

如果您发现自己在SQL中使用循环,则可能是错误的。当你习惯于程序化编程时,循环是很自然的,但如果你可以教你自己思考问题,那么你将获得更好的性能。这并不容易,但在最简单的层面上,您可以将其视为数据集的维恩图。 – 2014-09-26 15:07:30

回答

2
declare @t table(cname varchar(10),val1 decimal(10,2),val2 decimal(10,2)) 
insert into @t (cname,val1,val2) values ('atest',1.3,42.0) 
insert into @t (cname,val1,val2) values ('btest',1.58,6.87) 
select * from @t 

declare @tt table(name varchar(10), cname varchar(10),val1 varchar(10),val2 decimal(10,2)) 
insert into @tt(name,cname,val1,val2) 
select (select 'test')name, cname,val1,val2 from @t 
select * from @tt 
+0

谢谢!这确实回答了我的问题,我尝试插入时失败,因为我包含'值',但是这篇文章显示您可以直接插入。 – aperture 2014-09-26 15:26:58

1

我知道这有一张桌子作品
不知道有关功能
如果函数返回一个表这应该工作

set @name = 'test' 
select @name as [name], cname, val1, val2 from myfunc(@name) 
+0

嗨Blam。这似乎给出了正确的结果,但是“插入到@restable值”似乎无法将该集合放入表格中。 – aperture 2014-09-26 15:23:24

+1

显示插入。因为我认为你不应该在这个插入中使用术语“值”。 – Paparazzi 2014-09-26 15:26:06

+0

你是对的,我不应该有插入,并从mohan111的帖子注意到,它不包括在内。 – aperture 2014-09-26 15:28:04