触发器:
ALTER PROCEDURE ControllerTooEnterprise --插入实际控制人的同时更新企业从业人员总数和企业规模
@EnterpriseID INT,
@Enterprise_People INT,
@TrainAll INT,
@Enterprise_Scale DECIMAL(9),
@ControllerName VARCHAR(50),
@ControllerTel VARCHAR(50)
AS
BEGIN
DECLARE @SQL1 VARCHAR(100);
DECLARE @SQL2 VARCHAR(100);
SET @SQL1='INSERT INTO Controller (ControllerName,ControllerTel,TrainAll,EnterpriseID) VALUES ('''+@ControllerName+''','''+@ControllerTel+''','''+@TrainAll+''','''+@EnterpriseID+''')'
SET @SQL2='UPDATE Controller SET (Enterprise_People='+@Enterprise_People+',Enterprise_Scale='+@Enterprise_Scale+') WHERE EnterpriseID='+@EnterpriseID
EXECUTE(@SQL1);
EXECUTE(@SQL2);
END
执行:
EXECUTE ControllerTooEnterprise 1503,888,888.88,0,'LEE JUN','13998989966'
消息:
将 varchar 值 'INSERT INTO Controller (ControllerName,ControllerTel,TrainAll,EnterpriseID) VALUES ('LEE JUN','15398959966','' 转换为数据类型为 int 的列时发生语法错误。
这到底是个什么情况呢? 头疼
试试
EXECUTE ControllerTooEnterprise 1503,888,888.88,0,'LEE JUN',13998989966
13998989966 不要用引号
电话号码是字符型 对 他没影响 。 主要是 @TrainAll 明明传了 0 为什么执行的时候就成了 ''
@小尾尾: ...
DECLARE @SQL2 VARCHAR(100);
SET @SQL1='INSERT INTO Controller (ControllerName,ControllerTel,TrainAll,EnterpriseID) VALUES ('''+@ControllerName+''','''+@ControllerTel+''','''+@TrainAll+''','''+@EnterpriseID+''')'
。。。
以上 的 @EnterpriseID 是INT类型,不需要引号了。
@freeyhy: 用引号也没关系的 。问题不在这里!
@小尾尾:
1.这个是存储过程,不是触发器
2.
EXECUTE(@SQL1);
EXECUTE(@SQL2);
该为
print (@SQL1);
print (@SQL2);
你会 直观的发现 你 的 引号 用错地方了。
@freeyhy: 谢谢你的回答,分给你吧 我已经找到解决办法了 用CAST 转换就行了 唔该晒!
不知道