Sql server SQL Server中动态SQL中的异常处理

Sql server SQL Server中动态SQL中的异常处理,sql-server,Sql Server,在动态SQL语句中,一个@STU_ID值无法将数据插入到另一个表中。在这里,如果执行失败,我需要知道哪个@STU_ID CREATE PROC DATA_COPY ( @SRC_TABLE VARCHAR(30), @DEST_TABLE VARCHAR(30) ) AS DECLARE @STU_ID INT BEGIN DECLARE STUDENT_CURSOR CURSOR FOR SELECT DISTINCT STU_ID FROM STUDENT OPE

在动态SQL语句中,一个@STU_ID值无法将数据插入到另一个表中。在这里,如果执行失败,我需要知道哪个@STU_ID

CREATE PROC DATA_COPY
 (
 @SRC_TABLE VARCHAR(30),
 @DEST_TABLE VARCHAR(30)
 )
 AS
 DECLARE @STU_ID INT
 BEGIN
  DECLARE STUDENT_CURSOR CURSOR FOR
  SELECT DISTINCT STU_ID FROM STUDENT

  OPEN STUDENT_CURSOR
        FETCH NEXT FROM STUDENT_CURSOR INTO @STU_ID
    WHILE @@FETCH_STATUS = 0
        BEGIN

EXEC ('INSERT INTO '+@DEST_TABLE+'
    SELECT *
    FROM '+@SRC_TABLE+' 
    WHERE STU_ID='+@STU_ID)

        FETCH NEXT FROM STUDENT_CURSOR INTO @STU_ID
    END
    CLOSE STUDENT_CURSOR
    DEALLOCATE STUDENT_CURSOR
 END
你能帮我怎么做吗


谢谢

您可以使用


你有错误吗?如果是,你能把它包括在内吗?最有可能的情况是,
SELECT*从'+@SRC_TABLE+'中选择,其中STU_ID='+@STU_ID
不返回任何结果。在执行插入之前,应检查以确保有数据。此外,您正在基于SELECT*插入到表中。当模式更改时,这会让您感到非常痛苦。错误是:Msg 8152,级别16,状态14,第1行字符串或二进制数据将被截断。我显式地更改了目标表中一列的大小,使其低于源表,在源表中,我的要求是在执行存储过程时获取消息“@STU_ID无法将数据插入目标表“您的错误似乎与ID无关。您试图将数据插入的列不够大,无法将数据存储在变量中。例如,您的
@SRC_表
列长度与
@DEST_表
不匹配。请参阅Ok谢谢,我将检查您共享的链接
BEGIN TRY
    EXEC ('INSERT INTO '+@DEST_TABLE+'
    SELECT *
    FROM '+@SRC_TABLE+' 
    WHERE STU_ID='+@STU_ID)
END TRY
BEGIN CATCH
    PRINT 'ERROR WITH VALUE @STU_ID = ' + CONVERT(VARCHAR,@STU_ID)
END CATCH