sql如何将新产生的guid和一条其他表的数据插入当前表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql如何将新产生的guid和一条其他表的数据插入当前表相关的知识,希望对你有一定的参考价值。
sql如何将新产生的guid和一条其他表的数据插入当前表
将A表中的符合条件的数据查出,在新产生一条guid同时插入B表
sqlserver2005+以上案例:
--newid() 直接当及一列查询出来过滤到A表即可!
Insert into B表(字段1....)select NEWID()[guid],* from A表 where 过滤条件
如有问题可以追问,我当及时回答.
希望能帮到你!
参考技术A两种方式
第一种
建表
create table b (id int,name varchar(10),price int)insert into b values (1,'aa',100)
insert into b values (2,'bb',90)
insert into b values (3,'cc',101)
create table a (id varchar(64) default newid(),name varchar(10)) --注意a表的建表语句有默认值
先要将b表大于等于100的数据插入a中
insert into a(name) select name from b where price>=100
另一种方式,b表数据不变
c表
create table c (id varchar(64),name varchar(10))--此时id无默认值执行
insert into c select newid(),name from b where price>=100 参考技术B 有三种办法:sqlserver
insert into 表名 (字段名) values (newid())
oracle
insert into 表名(字段名) values (sys_guid())
mysql
insert into 表名(字段名) values(UUID())
你按你是什么数据库挑着用即可。 参考技术C insert B(col1,col2) select newid(),col3 from A where xxx追问
as
insert into T_Employee (F_Name,F_Sex,F_Age,F_Department) values (@F_name,@F_sex,@F_age,@F_department);
你这是要问什么?create proc里面的参数如果是字符类型必须规定长度
如varchar(36),不然的话默认长度即为1,参数长度超过1就会被截断
insert into T_Attend (F_Num,F_No) select F_Num from T_Employee,select F_No from T_Wage
错误:
Incorrect syntax near the keyword 'select'.
求教
额。。你这完全两个表的数据啊,如果你能确保后面两个表的select只有一条数据的话
可以select (select F_Num from T_Employee),(select F_No from T_Wage)
如果不能保证的话,那么需要将后面两个进行联查查询了
如果联合查询没有关联条件,可以用row_number()函数构建行号进行关联
谢谢,谢谢,非常感谢!问题解决了
追答呵呵,解决后请给好评哦亲~
追问必须的么,亲,
insert into T_Attend (F_id,F_Num,F_No) ) select (select F_Num from T_Employee),(select F_No from T_Wage)
这条语句,我想同时插入一条普通的数据要怎么写,例如把 ‘test’,同那两个select出来的一同插入
select (select F_Num from T_Employee),(select F_No from T_Wage)
union all
select '值1','值2'
union all前后对应的列类型要一致
insert into T_Attend (F_id,F_Num,F_No,F_Attendance) 后面可以帮我写下么,F_id是guid,F_Attendance是varchar,非常非常感谢
追答哦,你是说3个字段啊,并排写就行了,逗号隔开
insert into T_Attend (F_id,F_Num,F_No,F_Attendance)select (select F_Num from T_Employee),(select F_No from T_Wage),'test'本回答被提问者采纳
SQL如何删除2个字段的重复数据,如果重复了就只留一条数据,其他的删除,没有ID字段,在线等....急
只能用一条sql实现
参考技术A 提供一种思路:新建一个表,结构同你要整理的表,
1、把有重复的记录取一条插入新表
2、删除旧表的有重复的数据
3、把新表的数据插入旧表
4、删除新表完工追问
哥哥,这样做,还不如直接把数据复制到临时表
参考技术B 这是我以前写的实际sql,可参考这个思路:DELETE a
-- SELECT *
FROM dm_s_pt a
INNER JOIN
(
SELECT * FROM (
SELECT a.*,
ROW_NUMBER() OVER (PARTITION BY a.Batch,a.Index_code,a.Period,a.Region_code,
a.Operator_code,a.Business,a.Technology,a.Customer_type
order by b.Dp_id ASC) AS Row_Num
FROM dm_s_pt a INNER JOIN dm_s_pt b
ON a.Batch = b.Batch
AND a.Index_code = b.Index_code
AND a.Period=b.Period
AND a.Region_code = b.Region_code
AND ISNULL(a.Operator_code,'') = ISNULL(b.Operator_code,'')
AND ISNULL(a.Business,'') = ISNULL(b.Business,'')
AND ISNULL(a.Technology,'') = ISNULL(b.Technology,'')
AND ISNULL(a.Customer_type,'') = ISNULL(b.Customer_type,'')
AND ISNULL(a.Data_flag,'-1') = ISNULL(b.Data_flag,'-1')
AND a.Dp_id<>b.Dp_id
AND a.Data_flag='SOURCE'
) t WHERE Row_Num>1 /*挑出重复行并编号,然后删掉Row_Num>1的行(只保留编号为1的行)*/
) b
ON a.Batch = b.Batch
AND a.Index_code = b.Index_code
AND a.Period=b.Period
AND a.Region_code = b.Region_code
AND ISNULL(a.Operator_code,'') = ISNULL(b.Operator_code,'')
AND ISNULL(a.Business,'') = ISNULL(b.Business,'')
AND ISNULL(a.Technology,'') = ISNULL(b.Technology,'')
AND ISNULL(a.Customer_type,'') = ISNULL(b.Customer_type,'')
AND ISNULL(a.Data_flag,'-1') = ISNULL(b.Data_flag,'-1')
AND ISNULL(a.Dp_id,'-1') = ISNULL(b.Dp_id,'-1')
AND ISNULL(a.Value,'-999') = ISNULL(b.Value,'-999') 参考技术C select col1,col2,count(*)
from tab
group by col1,col2
having count(*)=1
union all
select col1,col2,count(*)
from tab
group by col1,col2
having count(*)>1追问
哥哥,其他的数据是删除,不是要你查询出只有一条的数据,而且只能用一句SQL语句,谢谢
参考技术D 删除重复数据必须保证每条数据有一个列来区分特殊性,一般都有id字段来区分,DELETE FROM TABLE_NAME
WHERE id 第5个回答 2011-12-31 delete from table_name where (col1,col2) not in (select max(col1),max(col2) from table_name group by col1,col2)追问
delete from tb_Users where (Names,Age) not in (select max(Names),max(Age) from tb_Users group by Names,Age)
为什么这段代码总显示,处 错误?
delete from tb_Users where rowid not in (select max(rowid) from a group by Names,Age)
如果完全没区别 一条语句是做不到的 我这是oracle的写法 rowid这物理地址肯定是唯一的 如果是其他的 目前应该没有一条语句就能解决的办法
rowID不行,没有这个函数,谢谢了
追答rowid不是函数 是oracle给每个行数据的物理地址字段 如果是其他数据库 真没能一个sql就能解决的办法
以上是关于sql如何将新产生的guid和一条其他表的数据插入当前表的主要内容,如果未能解决你的问题,请参考以下文章