
怎么把下面的的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