【发布时间】:2016-02-12 09:54:01
【问题描述】:
我有很多表具有相同的 (Something)ID tinyint、(Something)Name varchar(50) 的一般架构,如下所示:
PhoneType
---------------------------
PhoneTypeID | PhoneTypeName
---------------------------
1 | Cell Phone
2 | Landline
我已经编写了一个动态 sql 脚本,它可以对这些表执行 upsert,给定 ID(如果不是 0,则更新,否则插入)、名称值和表名:
ALTER PROCEDURE [dbo].[UpsertListItemValue]
@ItemID varchar(4),
@ItemName varchar(50),
@TableName varchar(50)
AS
DECLARE @sql nvarchar(500)
SET @sql = 'IF ' + @ItemID + ' <> 0
BEGIN
UPDATE ' + @TableName + '
SET ' + @TableName + 'Name = ''' + @ItemName + '''
WHERE ' + @TableName + 'ID = ' + @ItemID + '
END
ELSE
BEGIN
INSERT INTO ' + @TableName + '
(' + @TableName + 'Name)
VALUES
(''' + @ItemName + ''')
END'
EXECUTE (@sql)
GO
我想要插入/更新的项目的 ID,并将其用作我的存储过程的返回值。我该怎么做?
例如,如果我这样做
EXEC UpsertListItemValue 1, 'Celluar Phone', PhoneType
我想找回1(更新后),如果我这样做了
EXEC UpsertListItemValue 0, 'Work Phone', PhoneType
我想找回3(插入后)。
【问题讨论】:
标签: sql sql-server dynamic-sql