有表raw_material
(code,Ana_Ca,Ana_1)
-------------------
123,null,null另外一表sample_data
(code,elem,val)我在sample_data建立触发器send_value
CREATE TRIGGER send_value ON sample_data
INSTEAD OF INSERT
AS
BEGIN
exec P_OTH
END
和存储过程P_OTH
CREATE PROCEDURE P_OTH AS
declare @Ele_type varchar(254)
select @Ele_type=elem from sample_data
declare @str vARchar(254)
SELECT @STR=
CASE
WHEN @Ele_type='CaO' THEN 'ANA_Ca'
WHEN @Ele_type='FeO' THEN 'ANA_1'
END
INSERT INTO raw_material(@str)
select val from sample_data
where raw_analysis.code=sample_data.code
GO----------------
当向表sample_data插入记录(123,CaO,1.2)时出错,说raw_material的对象名无效,可能是P_OTH中
的INSERT INTO raw_material(@str)出错了,我该怎么办?望指教!弄了一晚上了:(
(code,Ana_Ca,Ana_1)
-------------------
123,null,null另外一表sample_data
(code,elem,val)我在sample_data建立触发器send_value
CREATE TRIGGER send_value ON sample_data
INSTEAD OF INSERT
AS
BEGIN
exec P_OTH
END
和存储过程P_OTH
CREATE PROCEDURE P_OTH AS
declare @Ele_type varchar(254)
select @Ele_type=elem from sample_data
declare @str vARchar(254)
SELECT @STR=
CASE
WHEN @Ele_type='CaO' THEN 'ANA_Ca'
WHEN @Ele_type='FeO' THEN 'ANA_1'
END
INSERT INTO raw_material(@str)
select val from sample_data
where raw_analysis.code=sample_data.code
GO----------------
当向表sample_data插入记录(123,CaO,1.2)时出错,说raw_material的对象名无效,可能是P_OTH中
的INSERT INTO raw_material(@str)出错了,我该怎么办?望指教!弄了一晚上了:(
declare @Ele_type varchar(254)
select @Ele_type=elem from inserted--sample_data这里改掉
declare @str vARchar(254)
SELECT @STR=
CASE
WHEN @Ele_type='CaO' THEN 'ANA_Ca'
WHEN @Ele_type='FeO' THEN 'ANA_1'
END
--INSERT INTO raw_material(@str)这句改掉
insert into raw_material(code)
values @str
select val from sample_data
where raw_analysis.code=sample_data.code
GO
CREATE TRIGGER send_value ON sample_data
INSTEAD OF INSERT
AS
BEGIN
declare @Ele_type varchar(254)
select @Ele_type=elem from inserted
declare @str vARchar(254)
SELECT @STR=
CASE
WHEN @Ele_type='CaO' THEN 'ANA_Ca'
WHEN @Ele_type='FeO' THEN 'ANA_1'
END
insert into raw_material(code)
values @str
ENDselect val from sample_data
where raw_analysis.code=sample_data.code
你这两句在存储过程里是做什么用的呀?返回值?你这个返回值是返回到触发器里呀,触发器还有返回值??我还是第一次见到。
你那个报错是因为insert into用错,insert 语句哪能这样呀。要用我种形式
--INSERT INTO raw_material(@str)这句改掉
insert into raw_material(code)
values @str
我不需要插入raw_material(code)字段,是要根据sample_data(elem)的值,来判断将sample_data(val)插入到raw_material(特定字段CASE判断)
所以才用--INSERT INTO raw_material(@str)
select val from sample_data
where raw_analysis.code=sample_data.code
你这两句在存储过程里是做什么用的呀?返回值?你这个返回值是返回到触发器里呀,触发器还有返回值??我还是第一次见到。我是想通过这两句返回val值,写到raw_material(@str)字段
select val from sample_data
where raw_analysis.code=sample_data.code
==========
Try:
Exec ( 'INSERT INTO raw_material( ' + @str + ') select val from sample_data
where raw_analysis.code=sample_data.code')
我测试了你这两个表和触发器及存储过程
当插入后,执行存储过程时,sample_data表其实根本没有数据,所以select @Ele_type=elem from sample_data这个语句返回值是null
你说后面的语句能不能执行呢,我试着把存储过程放到触发器里看看能不能行
要么你在触发器里就带个参数进去,把插进去的elem值做为参数赋给存储过程
你这语句也没用的,我测试了。
这时候表里根本没有数据,没法取的。在存储过程里怎么改语句都没办法用的。这时候表里根本没有插进去的那个值
INSTEAD OF INSERT这个触发器类型决定了,插入sample_data一条记录,这条记录回转存到别的地方,而sample_data不会保留数据==========
Try:
Exec ( 'INSERT INTO raw_material( ' + @str + ') select val from sample_data
where raw_analysis.code=sample_data.code')
我上午TRY。
这问题晚上都没睡好,这么早起来看回贴,感谢两位关心
Try:
Exec ( 'INSERT INTO raw_material( ' + @str + ') select val from sample_data
where raw_analysis.code=sample_data.code')
郁闷了,同样的错误CRY
INSERT INTO 表名( 列名) 值
中,列名是否能用变量(@str)替代???
IF ELSE的嵌套判断来解决插入到哪一字段的问题了
通过设置标志为来解决INSTEAD OF INSERT问题exec ('INSERT INTO 表名( '+列名+')')的方式,在前几楼有提到,不过没用:)
变态的字符串连接嵌套多表连接查询也许能解决这问题,不过才初学的我看不懂。
反正实际问题解决了,虽然效率不一定高,结贴