Possible Duplicate:
Is there a way to specify table name as a string?在INSERT語句
下面的腳本使用表名的變量將無差錯地執行:
DECLARE @SourceDB sysname, @SourceTable sysname,
@UserID NVARCHAR(500), @DMLType CHAR(1), @SourceIdent uniqueidentifier, @ChangedData XML,
@SQL as NVARCHAR(MAX)
-- xml datatype and its capabilities rock
SELECT @SourceDB = T.c.query('/AuditMsg/SourceDb').value('.[1]', 'sysname'),
@SourceTable = T.c.query('/AuditMsg/SourceTable').value('.[1]', 'sysname'),
@SourceIdent = T.c.query('/AuditMsg/SourceIdent').value('.[1]', 'uniqueidentifier'),
@UserID = T.c.query('/AuditMsg/UserId').value('.[1]', 'NVARCHAR(50)'),
@DMLType = T.c.query('/AuditMsg/DMLType').value('.[1]', 'CHAR(1)'),
@ChangedData = T.c.query('*')
FROM @msgBody.nodes('/AuditMsg/ChangedData') T(c)
INSERT INTO dbo.AVE_Stamm(SourceDB, SourceIdent, UserID, DMLType, ChangedData)
SELECT @SourceDB, @SourceIdent, @UserID, @DMLType, @ChangedData
但是,當我改變INSERT
聲明
SET @sql = 'INSERT INTO @SourceTable (SELECT @SourceDB, @SourceIdent, @DMLType, @ChangedData, @UserID)';
EXEC (@sql);
它不再工作了。可以請別人幫我,這裏有什麼不對?
我在SQL Server 2008 R2的存儲過程中使用此腳本。
能否請您提供這個答案背後的一些背景/推理爲有機磷農藥中受益。 –
@JK:編輯推理 –
謝謝,你+1。 –