通过游标将主键值插入到另一个 table

Inserting primay key values to another table through cursor

我在获取 table 的主键的过程中有一个游标 传入过程参数。我需要将主键的值插入另一个 table

CREATE  PROCEDURE TRY25  @CURRENT_TABLE NVARCHAR(100)  

AS      

DECLARE @QUERY NVARCHAR(4000)   

SET NOCOUNT ON      
DECLARE     @COLUMNNAME AS NVARCHAR(MAX)    
DECLARE CURP CURSOR FOR    
SELECT COLUMN_NAME  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC            
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU            
         ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND            
            TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME AND             
            KU.TABLE_NAME=@CURRENT_TABLE         
ORDER BY KU.TABLE_NAME, KU.ORDINAL_POSITION;      
OPEN CURP      
FETCH NEXT FROM CURP INTO @COLUMNNAME    
WHILE @@FETCH_STATUS = 0 BEGIN    
print concat(@columnname)  
FETCH NEXT FROM CURP INTO @COLUMNNAME    
END -- END OF FETCH    
CLOSE CURP    
DEALLOCATE CURP  

您需要使用动态 sql 来执行此操作。以下是您可以使用的示例代码 -

    CREATE  PROCEDURE TRY25  @CURRENT_TABLE NVARCHAR(100)  

    AS      

    DECLARE @QUERY NVARCHAR(4000)   , @COLUMNList NVARCHAR(4000) 
    SET @COLUMNList = ''

    SET NOCOUNT ON      
    DECLARE     @COLUMNNAME AS NVARCHAR(MAX)    
    DECLARE CURP CURSOR FOR    
    SELECT COLUMN_NAME  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC            
    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU            
             ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND            
                TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME AND             
            KU.TABLE_NAME=@CURRENT_TABLE         
ORDER BY KU.TABLE_NAME, KU.ORDINAL_POSITION;      
OPEN CURP      
FETCH NEXT FROM CURP INTO @COLUMNNAME    
WHILE @@FETCH_STATUS = 0 BEGIN    

SET @COLUMNList = @COLUMNList + @columnname + ','

FETCH NEXT FROM CURP INTO @COLUMNNAME    
END -- END OF FETCH    
CLOSE CURP    
DEALLOCATE CURP

SET @COLUMNList  = SUBSTRING(@COLUMNList , 1 , LEN(@COLUMNList) -1)
SET @QUERY = 'INSERT INTO YOUR_DEST_TABLE SELECT ' + @COLUMNList + ' FROM '     + @CURRENT_TABLE  --CHANGE YOUR TABLE NAME
EXEC (@QUERY)
PRINT @QUERY