【发布时间】:2013-04-09 06:30:51
【问题描述】:
在动态 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 * FROM '+@SRC_TABLE+' WHERE STU_ID='+@STU_ID不返回任何结果的情况。在执行插入之前,您应该检查以确保有数据。此外,您正在插入基于 SELECT * 的表。当架构发生变化时,这会让你陷入困境。 -
错误是:Msg 8152, Level 16, State 14, Line 1 字符串或二进制数据将被截断。
-
我将目标表中一列的大小显式更改为低于源表,我的要求是在执行存储过程时收到一条消息“@STU_ID 无法插入数据进入目标表”
-
您的错误似乎与ID无关。您正在尝试将数据插入到不足以存储变量中的数据的列中。例如。您的
@SRC_TABLE列长度与@DEST_TABLE不匹配。见stackoverflow.com/questions/779082/… -
好的,谢谢,我会检查你分享的链接
标签: sql-server