Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 尝试在注册期间将完整表复制到其他架构中_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 尝试在注册期间将完整表复制到其他架构中

Sql server 尝试在注册期间将完整表复制到其他架构中,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在开发一个多租户应用程序,我计划将表从默认模式(即dbo)传输到另一个模式,我正在使用存储过程创建新模式,所有关系都在dbo中维护 USE [STAGING] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Dheeraj Singh -- Create date: getdate -- Descriptio

我正在开发一个多租户应用程序,我计划将表从默认模式(即dbo)传输到另一个模式,我正在使用存储过程创建新模式,所有关系都在dbo中维护

USE [STAGING]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Dheeraj Singh
-- Create date: getdate
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[-old-sp_transfer_schema_on_signup]
-- Add the parameters for the stored procedure here
@NewSchema varchar(100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
    DECLARE @id INT
    DECLARE @name NVARCHAR(100)
    DECLARE @getid CURSOR

    BEGIN TRY
  BEGIN TRANSACTION SCHEDULEDELETE
  SET @getid = CURSOR FOR select name from sys.Objects where sys.Objects.schema_id=1 and type in     ('U','V')
    OPEN  @getid
    WHILE 1=1
    BEGIN
        FETCH NEXT
        FROM @getid INTO @name
        IF @@FETCH_STATUS < 0 BREAK
        
        exec( 'SELECT * INTO [' + @NewSchema + '].[' + @name + '] FROM dbo.[' + @name+ ']')
        --EXEC stored_proc @varName=@id, @otherVarName='test', @varForName=@name
    END
    CLOSE @getid
    DEALLOCATE @getid
     COMMIT TRANSACTION SCHEDULEDELETE
    PRINT 'X rows deleted. Operation Successful Tara.' --calculation cut out.
    END TRY

    BEGIN CATCH 
      IF (@@TRANCOUNT > 0)
       BEGIN
      ROLLBACK TRANSACTION SCHEDULEDELETE
      PRINT 'Error detected, all changes reversed'
   END 
    SELECT
        ERROR_NUMBER() AS ErrorNumber,
    ERROR_SEVERITY() AS ErrorSeverity,
    ERROR_STATE() AS ErrorState,
    ERROR_PROCEDURE() AS ErrorProcedure,
    ERROR_LINE() AS ErrorLine,
    ERROR_MESSAGE() AS ErrorMessage
END CATCH

    
END

我所期望的是将所有表从dbo复制到新创建的模式中,但在此传输过程中,它无法复制关系和键

Deploy(从源代码管理和数据库项目中部署),这将以正确的顺序部署对象。而且,2008年已经结束了一年多的时间,你应该长期关注升级路径,因为这就是它的作用。由于许多原因,这一逻辑存在严重缺陷。权限?索引?FG分配?你想当然太多了。您接受任何错误,并将其作为常规结果集返回-对某人来说,它只是一个错误。不遵守常规标识符规则通常是一个不好的迹象。这解决了我的问题,我错过了它:-