Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何更改SQL Server Compact Edition表架构中的列顺序?_Database_Visual Studio 2008_Sql Server Ce - Fatal编程技术网

Database 如何更改SQL Server Compact Edition表架构中的列顺序?

Database 如何更改SQL Server Compact Edition表架构中的列顺序?,database,visual-studio-2008,sql-server-ce,Database,Visual Studio 2008,Sql Server Ce,我正在使用Visual Studio 2008设计一个SQL Server Compact Edition数据库(*.sdf)。我不得不更改我的一个表的模式,添加一个新列 我想将新列从底部“移动”到字段列表中的不同位置。如何在Visual Studio designer中执行此操作 编辑:我知道从纯技术的角度来看,列的顺序并不重要。我正在制作一个应用程序的原型,所以我必须更改模式几次。例如,如果我必须更改主键,那么将最重要的列放在末尾将是“丑陋的”。我认为,其他开发人员在查看代码时会感到困惑。这

我正在使用Visual Studio 2008设计一个SQL Server Compact Edition数据库(*.sdf)。我不得不更改我的一个表的模式,添加一个新列

我想将新列从底部“移动”到字段列表中的不同位置。如何在Visual Studio designer中执行此操作


编辑:我知道从纯技术的角度来看,列的顺序并不重要。我正在制作一个应用程序的原型,所以我必须更改模式几次。例如,如果我必须更改主键,那么将最重要的列放在末尾将是“丑陋的”。我认为,其他开发人员在查看代码时会感到困惑。这是一个美学问题。

你不能只在设计师中移动它。您必须创建一个新列,删除旧列,生成脚本并编辑脚本,将其从旧表插入临时表,使旧列值(在选择中)进入新列。

我同意Pax的观点。如果出于特定原因,需要在查询中按特定顺序返回字段,只需更改查询,将字段放在需要的位置即可

如果出于任何原因,您需要不惜一切代价移动该字段,您可以使用如下脚本执行此操作,这使得FIELD3成为名为TestTable的表中的第一列:

但是,我坚持认为,您的问题可能可以通过另一种方法解决,而不需要重组表格。

遵循以下步骤:

  • 删除原始表的所有外键和主键
  • 重命名原始表
  • 使用CTA按所需顺序创建原始表
  • 放下那张旧桌子
  • 将所有约束应用回原始表

  • 谢谢你的回答。如何在VS中编写表格脚本?我没有找到那个选项。我使用的是SQLServerManagementStudio,所以它有点不同(我没有VS)。我显示了“Table Designer”工具栏,我点击了一个图标,它看起来像一个带软盘的滚动条,然后从出现的窗口复制/粘贴文本。请确保取消操作,以便更改不会运行。我必须是盲人。我找不到工具栏。你确定你使用的是SQL Server Compact数据库吗?我没有使用CTE,在检查过之后,你对Microsoft脚本解决方案不感兴趣,因为没有。人们说要用这个:谢谢你,KMike!我想我现在能做的最好的事情,就是放下那张桌子,从头开始重建它。这只是我的肛门保持力我不能看最后有一列最重要的表格……好吧,我希望我的建议能有所帮助。:)确保您复制了所有其他表项:索引、fk、检查约束等等……嗯,我正在寻找一种编写对象脚本的方法。对于SQL Server COMPACT数据库来说,这似乎不是一项简单的任务。。。
    /* Original sample table with three fields */
    CREATE TABLE [dbo].[TestTable](
        [FIELD1] [nchar](10) NULL,
        [FIELD2] [nchar](10) NULL,
        [FIELD3] [nchar](10) NULL
    ) ON [PRIMARY]
    
    /* The following script will make FIELD3 the first column */
    CREATE TABLE dbo.Tmp_TestTable
        (
        FIELD3 nchar(10) NULL,
        FIELD1 nchar(10) NULL,
        FIELD2 nchar(10) NULL
        )  ON [PRIMARY]
    GO
    IF EXISTS(SELECT * FROM dbo.TestTable)
         EXEC('INSERT INTO dbo.Tmp_TestTable (FIELD3, FIELD1, FIELD2)
            SELECT FIELD3, FIELD1, FIELD2 FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
    GO
    
    DROP TABLE dbo.TestTable
    GO
    
    EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT' 
    GO