【发布时间】:2015-09-23 22:25:20
【问题描述】:
我有如下声明:
DECLARE @Nr_Karton int;
SELECT @Nr_Karton = ISNULL(MAX(Nr), 1000) FROM W_Karton;
SET @Nr_Karton = @Nr_Karton + 1;
INSERT INTO W_Karton (Container_ID, Nr, Beschrieb, CreationDate, Location)
VALUES ('1', @Nr_Karton, '', getDate(), 'Bösingen');
但我得到了错误:
[SQL] SELECT @Nr_Karton = ISNULL(MAX(Nr), 1000) FROM W_Karton
[Err] 42000 - [SQL Server]必须声明标量变量“@Nr_Karton”。
如何摆脱错误?
【问题讨论】:
-
您的代码对我来说看起来不错。它发生在哪条线上?作为旁注,请不要重新发明身份列!
-
@Bridge 我编辑显示完整错误。重新定义身份列是什么意思?
-
您发布的代码在 SSMS 2008 中解析没有错误,这真的是给出错误的代码吗?你是如何执行它的?您是否正在尝试逐行执行而不是作为单个批次执行?正如 Bridge 所说,您应该使用
IDENTITYcolumn 而不是自己生成 ID 值。 -
@PandyLegend 具有标识规范的列将在您插入新行时自动增加它的值 - 这似乎是您试图通过获取当前最高值、添加一个然后添加回到桌子上。太糟糕了,如果您有并发会话/多个用户等,它将无法工作,因为您可能会遇到冲突。我相信它在 MySQL 中被称为
AUTO_INCREMENT。 -
@brian,这就是他设置
ISNULL(MAX(Nr), 1000)的原因。但是错误提示未定义变量,这很奇怪。
标签: sql sql-server sql-server-2008