1. sql语句实现一个表数据直接复制到新表
原表存在的话这样用:
insert into a select * from b
原表不存在的话这样用:
select * into a from b
这是SqlServer的用法,Oracle还有却别的,下面是Oracle的用法
原表存在的话这样用:
insert into a select * from b
原表不存在的话这样用:
create table a as select * from b
以上,希望对你有所帮助!
2. sql server如何重建索引到其它文件组
在日常工作中,我们发现很多实施案例中,sql server的数据库数据与索引在一起。我见过一个客户的,他的数据库总共大小才60g,但索引与数据完全混在一起,从管理数据库的直觉来看,性能方面肯定有问题,所以我建议他们,不管怎么样,把索引与数据库分开,对性能是有好处的!但是sql server的索引,想要通过重建的方式,把数据与索引分开,并不是一件容易的事怀,在使用rebuild时,并不能增加文件组选项。后来研究发现,可以通过以下方式把数据与非聚簇索引分开,具体如下:
set nocount on
declare @index table
(
object_id int,
objectName sysname,
index_id int,
indexName sysname,
fill_factor tinyint,
allow_row_locks bit,
allow_page_locks bit,
is_padded bit,
indexText varchar(max),
indexTextEnd varchar(max)
)
declare @indexColumn table
(
object_id int,
index_id int,
column_id int,
index_column_id int,
max_index_column_id int,
is_descending_key bit,
is_included_column bit,
columnName varchar(255),
indexText varchar(max) null
)
insert into @index
select
i.object_id,
object_name(i.object_id),
i.index_id,
i.name,
fill_factor,
allow_row_locks,
allow_page_locks,
is_padded,
'CREATE NONCLUSTERED INDEX [' + i.name + '] ON [dbo].[' + object_name(i.object_id) + '] ' + char(13),
'WITH (PAD_INDEX = ' +
CASE WHEN is_padded = 1 THEN ' ON ' ELSE ' OFF ' END +
', STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ' +
CASE WHEN allow_row_locks = 1 THEN ' ON ' ELSE ' OFF ' END +
', ALLOW_PAGE_LOCKS = ' +
CASE WHEN allow_page_locks = 1 THEN ' ON ' ELSE ' OFF ' END +
CASE WHEN fill_factor > 0 THEN ', FILLFACTOR = ' + convert(varchar(3), fill_factor) ELSE '' END +
') ON [IndexFG];print('''+i.name+' @ '+object_name(i.object_id)+''')' --+ CHAR(13) + ' GO;'+ CHAR(13) --注意标红的地方,这是新的文件组的名称
from sys.indexes i
where i.type = 2 and not exists(select 1 from sys.key_constraints kc where kc.name=i.name)
and objectproperty(i.object_id , 'IsUserTable') = 1
order by object_name(i.object_id), i.name
insert into @indexColumn
select
i.object_id,
i.index_id,
ic.column_id,
ic.index_column_id,
max(ic.index_column_id) over (partition by i.object_id, i.index_id, is_included_column),
is_descending_key,
is_included_column,
'[' + c.name + ']',
null
from @index i
join sys.index_columns ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
join sys.columns c
on ic.object_id = c.object_id
and ic.column_id = c.column_id
order by i.object_id, i.index_id, ic.index_column_id
declare @fields varchar(max)
declare @object_id int, @index_id int
select @fields = null, @object_id = -1, @index_id = -1
update @indexColumn
set @fields = indexText =
case when object_id = isnull(@object_id, object_id) and index_id = isnull(@index_id, index_id)
then isnull(@fields + ', ', ' ') + columnName + case when is_descending_key = 0 then ' ASC' else ' DESC' end
else columnName + case when is_descending_key = 0 then ' ASC' else ' DESC' end
end,
@object_id = case when object_id <> @object_id
then object_id else @object_id end,
@index_id = case when index_id <> @index_id
then index_id else @index_id end
from @indexColumn
where is_included_column = 0
select @fields = null, @object_id = -1, @index_id = -1
update @indexColumn
set @fields = indexText =
case when object_id = isnull(@object_id, object_id) and index_id = isnull(@index_id, index_id)
then isnull(@fields + ', ', ' ') + columnName
else columnName
end,
@object_id = case when object_id <> @object_id
then object_id else @object_id end,
@index_id = case when index_id <> @index_id
then index_id else @index_id end
from @indexColumn
where is_included_column = 1
update @index
set indexText = i.indexText + '( ' + char(13) + char(9) + ic.indexText + char(13) + ') '
from @index i join @indexColumn ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
and ic.index_column_id = ic.max_index_column_id
and ic.is_included_column = 0
update @index
set indexText = i.indexText + 'INCLUDE ( ' + char(13) + char(9) + ic.indexText + char(13) + ') '
from @index i join @indexColumn ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
and ic.index_column_id = ic.max_index_column_id
and ic.is_included_column = 1
update @index
set indexText = indexText + indexTextEnd
from @index
select indexText, objectName, indexName
from @index
最后的查询结果第一行就是执行的命令!
3. 如何将数据库中已有的文件加入文件组
SQL文件组就是文件的逻辑集合。它的目的是为了方便数据的管理和分配.文件组可以把指定是文件组合在一起。 在首次创建数据库,或者以后将更多文件添加到数据库时,可以创建文件组。但是,一旦将文件添加到数据库,就不可能再将这些文件移到其它文件组。 一个文件不能是多个文件组的成员。表格、索引以及text、ntext和image数据可以与特定的文件组相关联。这意味着它们的所有页都将从该文件组的文件中分配。 有三种类型的文件组: 主文件组 这些文件组包含主数据文件以及任何其它没有放入其它文件组的文件。系统表的所有页都从主文件组分配。 用户定义文件组 该文件组是用CREATEDATABASE或ALTERDATABASE语句中的FILEGROUP关键字,或在SQLServer企业管理器内的"属性"对话框上指定的任何文件组。 默认文件组 默认文件组包含在创建时没有指定文件组的所有表和索引的页。在每个数据库中,每次只能有一个文件组是默认文件组。如果没有指定默认文件组,则默认文件组是主文件组。 最多可以为每个数据库创建256个文件组。文件组只能包含数据文件。事务日志文件不能是文件组的一部分。 (⊙_⊙)?
4. sql 怎么把一个表的数据插入到另外一个表
--第一种情况的
1》如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:
INSERT INTO 目标表 SELECT * FROM 来源表(查询条件);
2》比如要将 articles 表插入到 newArticles 表中,则是:
INSERT INTO newArticles SELECT * FROM articles;
3》如果只希望导入指定字段,可以用这种方法:
INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;
--下面是第二种情况
4》如果将一个表的数据放在另外一个不存在的表:
select * into 目标不存在的表 from 来源表(查询条件)
5》如果只希望导入指定字段,可以用这种方法:
select 字段1,字段2,... into 目标不存在的表 from 来源表
5. 怎样把sql数据库表结构导入到新数据库
需要看需求,如果另一张表结构是存在的是一种,另一种是另一张表不存在。
表结构存在:
1
insert into 被插入表(字段1,字段2,字段3) select 字段1,字段2,字段3 from 原表;
注意:被插入表的字段1,字段2,字段3需要与原表的插入字段一一对应。
表结构不存在:
1
select 字段1,字段2,字段3 into 新表 from 原表;
6. sql server怎样把一个数据库中的表移动到另一个数据库中
分两步进行:
第一步,复制表结构:
在表上面右击——>编写表脚本为:——>Create到——>新查询编辑器窗口,你也可以保存为sql文件,将新查询编辑器窗口最上面的一句话USE [olddatabase]中的“olddatabase”修改为“newdatabase”,其中olddatabase为源数据库名,newdatabase为目标数据库名,点击上面的“执行”按钮,这样,表结构复制完毕;
第二步,复制表数据:
在“olddatabase”上右击——>任务——>导出数据,在弹出对话框中选好源数据库、身份验证和目标数据库、身份验证后,然后选择要复制的表,完成后则表数据即插入成功。
7. SQL更改表所在的文件组有什么用
文件组的作用是存储路径,你说说的表的文件组那就是分区表要用到的,分区表设多个文件组的目的就是提高I/O的读写速度,对于一个数据库建多个文件组的目的也是为了分散存储。
8. 在SQL Server中,如何将现有表设置到新的文件组(Filegroup)
public
class
CatchException{
public
static
void
main(String
[]
args){
int[]
a
=
{1,2,3};
try{
System.out.println(a[3]);
}
catch(Exception
e){
System.out.println("树组越界了~");
}
}
}
手机打字代码很蛋疼……希望能帮到你~