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

D_D_A 2016-09-22 02:09:12
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
...全文
470 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
D_D_A 2016-09-22
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects where id = object_id(N'dbo.[[dzl]]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)--判断数据库中是否存在该表(1、存在就删除表2不存在就执行下一个sql) drop table dbo.[dzl] go create table dbo.[dzl]( personid varchar(30), name varchar(30), dressdate varchar(30), accountid varchar(30), sssss varchar(30) ) go insert into dbo.[dzl] (personid,name,dressdate,accountid,sssss)exec Employees
中国风 2016-09-22
  • 打赏
  • 举报
回复
比如你的存储过程里生成实体表等操作最好用临时表,不然造成并发操作是不可避免的
卖水果的net 版主 2016-09-22
  • 打赏
  • 举报
回复

-- 表要在执行存储过程之前创建
create table test(id int, name varchar(30))
go
create proc sp_test
as
begin
    select top 5 id, name from sysobjects order by id 
end
go
-- 这就是你的语法
insert into test exec sp_test 
go
select * from test
go
drop table test 
go
drop proc sp_test 
go

(5 行受影响)
id          name
----------- ------------------------------
3           sysrscols
5           sysrowsets
7           sysallocunits
8           sysfiles1
17          syspriorities

(5 行受影响)


中国风 2016-09-22
  • 打赏
  • 举报
回复
插入新表,你的列数和列名为动态的,你只能在存储过程里生成表或全局临时表,调用时引用

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧