[英]SQL Server - SQL - INSERT VALUE from SELECT Statement
我們將不勝感激幫助:我想在更新同一數據列之前將值更新到審核表( dbo.Audit
)。
我有一條SELECT
語句來檢索存儲在表dbo.[RuleSet]
[SelectStatement]
列中的值(使用動態SQL創建)。
問題:我不確定如何更新Audit
表。
CREATE TABLE [dbo].[Audit]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[UpdateID] [int] NULL,
[TableName] [varchar](250) NULL,
[Orig] [varchar](250) NULL
)
CREATE TABLE [dbo].[RuleSet]
(
[UpdateID] [int] IDENTITY(1,1) NOT NULL,
[VID] [int] NULL,
[TableName] [varchar](250) NOT NULL,
[SetColumn] [varchar](250) NOT NULL,
[SetValue] [varchar](250) NOT NULL,
[WhereClause] [varchar](256) NULL,
[SelectStatement] [varchar](4000) NULL
)
INSERT [dbo].[RuleSet] ([UpdateID], [VID], [TableName], [SetColumn], [SetValue], [WhereClause], [SelectStatement])
VALUES (1, 1, N'TableA', N'ColumnA', N'10', N'ColumnA > 10', N'SELECT ColumnA FROM TableA WHERE ColumnA > 10')
INSERT [dbo].[RuleSet] ([UpdateID], [VID], [TableName], [SetColumn], [SetValue], [WhereClause], [SelectStatement])
VALUES (3, 2, N'TableB', N'ColumnB', N'20', N'ColumnB > 20', N'SELECT ColumnB FROM TableB WHERE ColumnB > 20')
GO
我要實現的代碼的邏輯是:
INSERT INTO [dbo].[Audit]([UpdateID], [TableName], [Orig])
SELECT
[UpdateID], [TableName],
--Value returned from executing the SELECT statement in column[SelectStatement]
FROM
dbo.[RuleSet]
謝謝
您可以使用EXECUTE sp_executesql執行[SelectStatement]
並將結果存儲在臨時表或變量中。 然后使用它作為子查詢插入[dbo].[Audit]
。
如果像這樣將查詢存儲在[SelectStatement]
則可以使自己更輕松。
N'SELECT ColumnB INTO #TempB FROM TableB WHERE ColumnB > 20'
然后,您可以只使用sp_executesql執行它,然后從TempB
選擇插入內容。
EXECUTE sp_executesql (SELECT [SelectStatement] FROM [dbo].[RuleSet] where [UpdateID] = ?);
INSERT INTO [dbo].[Audit ] ([UpdateID], [TableName], [Orig])
SELECT [UpdateID], [TableName], #TempB.*
FROM dbo.[RuleSet], #TempB
WHERE [UpdateID] = ?
請注意,我的示例只是一個一般性建議,可能需要進行調整才能執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.