【问题标题】:How to use inserted table in variable in insert trigger sql server?如何在插入触发器sql server的变量中使用插入的表?
【发布时间】:2014-10-10 11:20:46
【问题描述】:

我想在查询变量中使用插入的表来创建插入触发器, 像这样

SET @strTemp = 'INSERT INTO '+@LeadTable+'(service_id,
batch_no,
phone1,
userid,
tt_no
,complaint_id) 
select inserted.ProcId,''' + @szBatchName + ''',Right(inserted.Phone,11),inserted.UserId,inserted.TtNo,inserted.ComplaintId from inserted'

此代码未在目标表中插入数据。 我想知道如何实现这一目标? 请帮忙。 谢谢


这是我的实际代码,但它不工作

USE [LeadDTB]

alter TRIGGER [dbo].[Push_SibelRealTimeData]
on [dbo].[SibelRealTimeData]
After Insert
AS
BEGIN

DECLARE @szProcId   varchar(20)
DECLARE @szUserId   varchar(50)
DECLARE @szTtNo varchar(15)
DECLARE @szComplaintId  varchar(50)
DECLARE @szPhone varchar(50)
Declare @szBatchName varchar(50)
Declare @LeadDB varchar(50)
Declare @LeadTable varchar(50)
Declare @strTemp varchar(max)
Declare @nBatchCount int
declare @szdialTime varchar(50)

CREATE TABLE #tmTable (id int,procid varchar(50),uid varchar(50),ttno varchar(50),complaintid  varchar(50),phone varchar(50))

select * into #tmTable from inserted 

select @szdialTime = DATEADD(HOUR, 1, GETDATE())

set @szBatchName = 'SIBELRT_'+CONVERT(varchar(5), right(Year(GETDATE()),2))+Convert(varchar(5),MONTH(GETDATE()))

select @LeadDB =  service_db_name from services where service_id =@szProcId

set @LeadTable = @LeadDB+'..LEAD_MASTER_' + @szProcId

SET @strTemp = 'INSERT INTO '+@LeadTable+'(
service_id,
lead_import_batch_id, 
lead_phone1,
userid,
tgs_tt_no,
lead_complaint_id
) 
select 
procid,
''' + @szBatchName + ''',
Right(phone,11),
uid,
ttno,
complaintid from #tmTable '

EXEC(@strTemp)

drop table #tmtable

END

此代码无效

【问题讨论】:

    标签: sql-server variables triggers insert


    【解决方案1】:
    SELECT *
    INTO   #temp
    FROM   inserted
    
    SET @strTemp = 'INSERT INTO ' + @LeadTable
                   + '(service_id,
                       batch_no,
                       phone1,
                       userid,
                       tt_no,
                       complaint_id) 
    select ProcId,''' + @szBatchName
                   + ''',Right(Phone,11),UserId,TtNo,ComplaintId from #temp' 
    

    【讨论】:

      【解决方案2】:

      插入的表在动态 SQL 语句的范围内不可见。您需要将插入的行插入到表变量(或临时表)中,然后在动态 SQL 语句中使用它。表变量需要作为参数传递给动态 SQL 作为参数(@szBatchName 值也应该如此)。

      【讨论】:

        猜你喜欢
        • 2013-11-09
        • 2016-12-22
        • 1970-01-01
        • 2021-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多