怎么把下面的的sql语句查询出来的结果插入到一张新表中去 求大神帮忙

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么把下面的的sql语句查询出来的结果插入到一张新表中去 求大神帮忙相关的知识,希望对你有一定的参考价值。

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'Employee' AND type = 'P')--判断数据库中是否存在改存储过程(1、存在就删除存储过程2不存在就执行下一个sql)
DROP PROCEDURE Employees
GO

create proc Employees
as
DECLARE @SQL VARCHAR(8000) --定义SQL 语句
DECLARE @YMONTH int
--,@ACCOUNTID int
--set @YMONTH=@ACCOUNTID
SET @YMONTH=(SELECT CAST(substring(CONVERT(VARCHAR(10),GETDATE(),120),1,4)AS INT))

while @YMONTH>=2006
begin
if exists (select * from dbo.sysobjects where id = object_id(N'dbo.[lsfg]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)--判断数据库中是否存在该表(1、存在就删除表2不存在就执行下一个sql)
drop table dbo.[lsfg]
select IDENTITY(INT,1,1) AS ID,NAME INTO dbo.[lsfg] from za_yearstandard_a where @YMONTH=substring(CONVERT(VARCHAR(4),YMONTH,112),1,4) and DSTYLE='法官' order by SORTID,BREEDID asc
SET @SQL=''
DECLARE @id VARCHAR(10) --定义游标里面变量ID
DECLARE @name varchar(60)
DECLARE Employee_Cursor CURSOR FOR SELECT ID,NAME FROM lsfg

OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor INTO @id,@name
WHILE @@FETCH_STATUS = 0
BEGIN

SET @SQL=@SQL+'SELECT PERSONID,NAME,DRESSDATE,ACCOUNTID,'''+@name+''' AS SSSSS FROM ZG_JUDGMENTDETAIL_C where substring(ACCOUNTID,1,4)='''+CAST(@YMONTH AS VARCHAR)+'''
AND len(column_'+@id+')>0 UNION ALL '
--拼接SQL
FETCH NEXT FROM Employee_Cursor INTO @id,@name

END

CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
SET @SQL = SUBSTRING(@SQL,0,LEN(@SQL)-8) --修改SQL 去掉最后 UNION ALL
--SELECT @SQL
EXEC(@SQL)

SET @YMONTH=@YMONTH-1
end

--,@ACCOUNTID int
--set @YMONTH=@ACCOUNTID
SET @YMONTH=(SELECT CAST(substring(CONVERT(VARCHAR(10),GETDATE(),120),1,4)AS INT))

while @YMONTH>=2006
begin
if exists (select * from dbo.sysobjects where id = object_id(N'dbo.[lsfj]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)--判断数据库中是否存在该表(1、存在就删除表2不存在就执行下一个sql)
drop table dbo.[lsfj]
select IDENTITY(INT,1,1) AS ID,NAME INTO dbo.[lsfj] from za_yearstandard_a where @YMONTH=substring(CONVERT(VARCHAR(4),YMONTH,112),1,4) and DSTYLE='法警' order by SORTID,BREEDID asc
SET @SQL=''

DECLARE Employee_Cursors CURSOR FOR SELECT ID,NAME FROM lsfj

OPEN Employee_Cursors
FETCH NEXT FROM Employee_Cursors INTO @id,@name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL=@SQL+'SELECT PERSONID,NAME,DRESSDATE,ACCOUNTID,'''+@name+''' AS SSSSS FROM ZG_POLICEDETAIL_C where substring(ACCOUNTID,1,4)='''+CAST(@YMONTH AS VARCHAR)+'''
AND len(column_'+@id+')>0 UNION ALL '
--拼接SQL
FETCH NEXT FROM Employee_Cursors INTO @id,@name

END

CLOSE Employee_Cursors
DEALLOCATE Employee_Cursors
SET @SQL = SUBSTRING(@SQL,0,LEN(@SQL)-8) --修改SQL 去掉最后 UNION ALL
--SELECT @SQL
EXEC(@SQL)

SET @YMONTH=@YMONTH-1
end
go
exec Employees

@SQL这个是你生成的sql语句,你在你的sql中增加一个into table,这样能不能满足你的需求呢?

关于select into语句我就不多说了,给你参考链接,你看看是不是你要的

http://www.w3school.com.cn/sql/sql_select_into.asp

还有就是,你也可以将insert 加到你的@SQL语句的前面直接执行,是不是也行呢?

比如:

现有的@SQL = 'SELECT NAME FROM TABLE UNION ALL SELECT ''ZHANGSNA'' '

你修改成@SQL2 = 'INSERT INTO TABLE2(NAME) ' + @SQL,这样是不是也行?

我们既然写存储过程了,而且目的也只是唯一的,那么我们就可以考虑直接将所有步骤放在存储过程中来处理,没必要再拿出来单独考虑怎么用

另外给你一个方式,你看看用得上用不上

--表

create table test

(

name varchar(50)

)

go


--动态sql添加数据

insert into test

exec('select 1')

go


--存储过程

create proc protest

as

declare @sql nvarchar(100) = ''

declare @s int = 1

while(@s < 5)

begin

select @sql += 'select ' + cast(@s as varchar(20)) + ' union all '

set @s += 1

end

select @sql += 'select 999'

exec(@sql)

go


--存储过程添加数据

insert into test

exec protest

参考技术A 在select之前加上create table table名
create table table名 select 。。。。就可以了追问

我不知道写在那个里面 能不能告诉我写在那个里面 谢谢啦

追答

EXEC(@SQL)之前 加上@SQL='create table table名'+@SQL+';'+@SQL

追问

可是这里面有两个游标 两个游标中查询的数据都要插入啊 而且这个表创建会报错的 这里一直在循环

追答

create table 改成 insert into

sql语句查询结果想打印出来,格式能不能调整啊?怎么弄啊

sql语句结果保存后想打印出来,但是格式有点不对?能不能调正一下啊

结果如下:
编号 款式 重量 工价 等级 单价 备注
---------- ---------- -------- ------ ---------- ------ --------------------
4-29-11 9003 0.97 1180 貂绒 1180 NULL

能不能让他对齐啊,不显示上面--------行吗?

求教······请高手帮忙··
我使用的是sql2000不是oracle··
不好意思···
用的sql2000查询分析器

不知道楼主使用的是什么工具查询的什么数据库,从展示的形式上看,像是使用SQL*PLUS查询oracle数据库的样子。

SQL*PLUS中,可以使用
COL colname FORMAT a4 其中colname为你的列名,a4为4位字符
如果是数字,可以为:90.99等等

相关的内容可以参照:
http://www.idcnews.net/html/edu/20071225/20437.html
http://orax.blog.sohu.com/61077864.html
参考技术A 利用表格控制 如果不行加我球球 三四五 三五五 三七七 参考技术B 直接下个工具连oracle数据库,推荐:PLSQL Developer,怎么看怎么爽。 参考技术C System.out.prin("----")
把上面括号里面的-- 去掉 就可以了

以上是关于怎么把下面的的sql语句查询出来的结果插入到一张新表中去 求大神帮忙的主要内容,如果未能解决你的问题,请参考以下文章

sql合并两张表(表字段不一致)到一张新表中

sql server怎么导出查询结果为脚本

将查询结果集插入数据表的SQL语句怎样写?

Hive学习笔记——保存select结果,Join,多重插入

SQL语句 怎么把从一个表中查出来数据插入到另一个表中

Oracle怎么查询表名,字段名以及字段的属性