小编stu*_*ubs的帖子

使用SELECT*INTO时,新表中的数据类型更改

我正在开发一个查询,将表结构从链接服务器复制到本地数据库中,以获得通用的表列表.

但是由于某种原因,十进制数据类型将更改为数字.在选择过度链接的服务器时,似乎只会发生这种情况.但是,当我在本地系统上尝试相同时,我无法复制问题.

发生此错误的环境本地和链接服务器的SQL版本不同(分别为10,12).不确定这是否相关.

如果有人能够对此有所了解,那将非常感激.谢谢.

查询如下:

WHILE (select count(*) from @tbls) > 0
BEGIN
    SELECT @id = 0, @tblname = '', @cols = '', @colSets = ''
    select top 1 @id = ID, @tblname = TableName, @PKField = PKField, @DataType = DataType from @tbls    

    if exists (select 1 from sys.tables where name = @tblname)
    begin
        delete from @tbls where ID = @id
        Continue;
    end

    exec('select * into '+ @tblname +' from [linkedserver].MyDatabase.dbo.'+@tblname + ' where 1 = 0')

    delete from @tbls …
Run Code Online (Sandbox Code Playgroud)

sql t-sql

5
推荐指数
1
解决办法
858
查看次数

没有ORDER的SELECT没有在Clustered Index上排序

这个有点困惑.我的印象是,如果没有给出ORDER BY,SELECT应默认为Clustered Index进行排序.

但是如果我运行下面的代码,它会使用NON-Clustered索引.

DROP TABLE TEST_TABLE
if NOT EXISTS(select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'TEST_TABLE')
BEGIN
    CREATE TABLE TEST_TABLE (
        [ID]    int     NOT NULL IDENTITY(1,1),
        [col1]  int     NOT NULL,
        [col2]  int     NOT NULL

        CONSTRAINT [PK_TEST_TABLE] PRIMARY KEY CLUSTERED 
    (
        [ID] ASC
    )WITH (FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
END

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[TEST_TABLE]') AND name = N'TEST_TABLE_cols')
    DROP INDEX [TEST_TABLE_cols] ON [dbo].[TEST_TABLE]

CREATE UNIQUE NONCLUSTERED INDEX [TEST_TABLE_cols] ON [dbo].[TEST_TABLE] 
( …
Run Code Online (Sandbox Code Playgroud)

sql-server sorting clustered-index

1
推荐指数
1
解决办法
125
查看次数

标签 统计

clustered-index ×1

sorting ×1

sql ×1

sql-server ×1

t-sql ×1