如果存储过程中存在“表类型”,如何检查数据

时间:2013-11-29 21:36:45

标签: sql-server sql-server-2008 stored-procedures

我在sql server 2008中创建了一个类型,用于将数据表传递给存储过程。 我的SP工作正常,但如果表中存在数据,如何查看数据? (例如:检查detailid或id 如果存在:更新它们 如果不存在:插入新的)

这是我的SP:

ALTER PROCEDURE [dbo].[Insert_Data]
(
    @empinfo myType READONLY
)
AS
BEGIN
SET NOCOUNT ON;

Insert into TableEmp(ID, DetailID, Text)
select id, detailid, text from @empinfo

END

Thnx all

2 个答案:

答案 0 :(得分:2)

ALTER PROCEDURE [dbo].[Insert_Data]
(
    @empinfo myType READONLY
)
AS
BEGIN
SET NOCOUNT ON;


MERGE TableEmp AS t
USING (select id, detailid, [text] from @empinfo) AS s
ON s.ID = t.ID
WHEN MATCHED THEN 
    UPDATE SET t.detailid = s.detailid,
               t.[text] = s.[text]

WHEN NOT MATCHED THEN
INSERT(id, detailid, [text])
VALUES(s.id, s.detailid, s.[text]);

END

答案 1 :(得分:1)

您可以声明变量并计算表中的记录。

DECLARE @count INT

SET @count = (SELECT COUNT(ID)
              FROM TableEmp)

-- Do Something with the results

然后使用条件逻辑,您可以使用计数来完成不同的结果。

IF @count = 0
BEGIN
    -- Do Something cool like insert data
END
ELSE
BEGIN
   -- Do Something else like update data
END

这是一个简单的示例,您可以搜索特定记录并进行更新。如果需要更新许多记录,则可以使用游标并遍历所需的记录并更新所需的记录。

有关游标的更多信息,请访问:

http://technet.microsoft.com/en-us/library/ms180169.aspx