Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Sql server 将主ID列类型从UniqueIIIdentifier更改为nvarchar_Sql Server_Database_Sql Server 2008_Database Design_Database Schema - Fatal编程技术网

Sql server 将主ID列类型从UniqueIIIdentifier更改为nvarchar

Sql server 将主ID列类型从UniqueIIIdentifier更改为nvarchar,sql-server,database,sql-server-2008,database-design,database-schema,Sql Server,Database,Sql Server 2008,Database Design,Database Schema,我在SQL Server中有一个庞大的数据库,具有复杂的依赖关系、大量的存储过程和复杂的视图 现在,根据业务需求,我必须将列数据类型从uniqueidentifier更改为nvarchar 如果列是表的主键,我可以将列数据类型更改为nvarchar 如果主键列在另一个表中用作外键,我可以这样做吗?不,您不能这样做 尝试时会出现的错误将是 ALTER TABLE ALTER COLUMN失败,因为一个或多个对象访问此列 依赖项是在列上创建的表的主键,以及在引用此列的另一个表上创建的外键 摘自MSD

我在SQL Server中有一个庞大的数据库,具有复杂的依赖关系、大量的存储过程和复杂的视图

现在,根据业务需求,我必须将列数据类型从
uniqueidentifier
更改为
nvarchar

如果列是表的主键,我可以将列数据类型更改为
nvarchar

如果主键列在另一个表中用作外键,我可以这样做吗?

不,您不能这样做

尝试时会出现的错误将是

ALTER TABLE ALTER COLUMN失败,因为一个或多个对象访问此列

依赖项是在列上创建的表的主键,以及在引用此列的另一个表上创建的外键

摘自MSDN的

  • 在列级别指定的外键约束只能列出一个引用列。此列必须与定义约束的列具有相同的数据类型

  • 在表级别指定的外键约束的引用列数必须与约束列列表中的列数相同。每个引用列的数据类型也必须与列列表中的相应列相同


  • 嗯,你可以这样做,但这是不可取的。因为这样您可能必须更新所有依赖表中的数据。我建议先在虚拟数据库中执行,然后在开发数据库中应用,然后使用SP执行一些CRUD操作进行测试。不是直接执行-您必须先删除所有引用FK约束,然后更改父表中的数据类型,更改所有引用外键的数据类型,然后再次重新创建主键约束-这适用于每个表…@marc_s+1。是的,就是这样。最好我尝试将数据更改为uniqueidentifier并推送到表中。无论是
    uniqueidentifier
    还是
    nvarchar
    都不能成为非常好和强大的主键-两者都不适合该任务。如果您正在更改,我强烈建议您选择
    INT
    BIGINT
    而不是
    nvarchar
    。。。。