【发布时间】:2014-12-04 16:20:16
【问题描述】:
我想要一个通用过程来更新我的查找表。
CREATE TYPE S_Reference.[ReferenceType] as TABLE (
[Id] SMALLINT NOT NULL PRIMARY KEY,
[Code] VARCHAR(16) UNIQUE NOT NULL,
[Rank] SMALLINT NOT NULL CHECK([Rank]>0),
[Description] VARCHAR(128) NOT NULL,
[Base] BIT NOT NULL DEFAULT 0);
GO
CREATE PROCEDURE [S_Reference].[P_B_ReferenceMerge]
@Values [ReferenceType] READONLY,
@TableName NVARCHAR(50)
AS
DECLARE @SQLQuery NVARCHAR(200)
SET @SQLQuery = 'SELECT * FROM ' + @TableName
MERGE INTO @SQLQuery Ori
USING
@Values New
ON (Ori.[Id] = New.[Id])
WHEN MATCHED THEN
UPDATE
SET Ori.[Code] = New.[Code],
Ori.[Rank] = New.[Rank],
Ori.[Description] = New.[Description],
Ori.[Base] = New.[Base]
WHEN NOT MATCHED THEN
INSERT (Ori.[Id] , Ori.[Code], Ori.[Rank],Ori.[Description] ,Ori.[Base])
Values (New.[Id] , New.[Code], New.[Rank],New.[Description] ,New.[Base]);
RETURN 0
但我不知道如何使用“tableName”? 我在 Ori 上遇到错误。[Id],我认为问题来自
SET @SQLQuery = 'SELECT * FROM ' + @TableName
MERGE INTO @SQLQuery Ori
【问题讨论】:
-
您为什么要尝试使用动态 SQL 来执行此操作,您实际上要做什么? MERGE INTO SELECT * FROM ' + @TABLENAME 语法不正确
-
@BS123 我想通过参数 AAValues 传递最后一个值的表。并通过参数 AATablename 传递目标表。该过程必须更新或插入 tableName 中的新值。
标签: sql sql-server tsql merge dynamic-sql