2014-10-10 59 views
0

我想用插入表中查詢變量上插入創建觸發器, 這樣如何在插入觸發器sql server的變量中使用插入的表?

SET @strTemp = 'INSERT INTO '[email protected]+'(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' 

這個代碼是不是在插入目標表數據。 我想知道如何做到這一點? 請幫忙。 謝謝


這是我的實際代碼BT它不工作

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 [email protected] 

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

SET @strTemp = 'INSERT INTO '[email protected]+'(
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 

這個代碼不工作

回答

2
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' 
1

插入的表格不是動態SQL語句的範圍內可見。您需要將插入的行插入到表變量(或臨時表)中,然後在動態SQL語句中使用它。表變量需要作爲參數傳遞給動態SQL作爲參數(應該是@szBatchName值)。