2014-04-03 100 views
0

因此,我發現了大量示例,說明如何將動態SQL的結果分配給變量,但我還沒有找到一種以我嘗試的方式要......所以要麼我以這種錯誤的方式去做,要麼我只是沒有找到適當的語法來正確執行這個。將動態SQL生成XML的結果存儲到XML變量

基本上,我試圖使用存儲過程從表中刪除行(將其視爲對錶的審計)之前從表中創建一行的XML記錄。我試圖通過動態SQL來實現這一點,以便可以從多個其他存儲過程調用存儲過程,這些存儲過程在其相應的表上執行刪除操作,但在此之前,它們會傳遞必要的信息(包含select的@sql變量聲明獲取記錄)到此審計存儲過程。

Create Procedure dbo.AuditDelete(
@sql NVARCHAR(200), 
@TableName VARCHAR(50), 
@UserName NVARCHAR(256) 
) 
AS 
    DECLARE @XML XML 
BEGIN 
    --at this point @sql will contain a select statement written by the calling stored procedure 
    --which is specifically written to return the record that is being deleted, example: 
@sql = select * from my.table where tableId = 1 FOR XML AUTO 

    execute sp_executesql @sql, N'@XML XML OUTPUT', @XML = XML OUTPUT; 
    SELECT @XML 
       --I was doing this as a check to ensure that XML has the record 
       --because the execute command returned the XML record, but @XML is null... 
       --and I can't figure out why 

    --code for inserting into the Audit table 

所以我敢肯定,它無論是一些語法我失蹤或者也許我只是要對這個錯誤的方式。有什麼建議麼?

注:這是正在做SSMS的SQL Server 2008 R2上

回答

6

您需要的結果您查詢分配給參數的動態SQL。

set @sql = N'set @XML = (select * from my.table where tableId = 1 FOR XML AUTO)' 
execute sp_executesql @sql, N'@XML XML OUTPUT', @XML OUTPUT 
+0

哦。我現在看到的是我正在研究的另一個問題......我覺得愚蠢的哈哈。你會期望如果我做了這個改變並且運行了一個測試(聲明@sql和@xml,然後你寫了什麼,然後'select @ XML'),我只能看到1個結果是XML記錄? – Jfabs

+0

@Jfabs是..... –