在存储过程中使用SELECT输出变量

时间:2017-03-20 14:50:48

标签: sql-server tsql

我对SQL很新,遇到了一个我无法从第二个存储过程中检索其他数据的问题。

我正在尝试一次从两个表中检索数据。 person表有一个guid,它引用personname表中的行。我需要两个表中的所有信息。

CREATE PROCEDURE [database].[rsp_person_getitembyid]
    @Id UNIQUEIDENTIFIER
AS
    SELECT 'Person' AS TableName, * 
    FROM person 
    WHERE Id = @Id;

    EXEC [database].rsp_personname NameId;

rsp_personname 的内部是:

CREATE PROCEDURE [database].[rsp_personname]
    @Id UNIQUEIDENTIFIER
AS

    SELECT 'PersonName' AS TableName, * 
    FROM crm_personname WHERE Id = @Id

我得到的错误是

  

将数据类型nvarchar转换为uniqueidentifier时出错。

我认为它来自最后一行的NameId。 NameId和Id在两个表中都存储为Guid。

任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:3)

您应该将NameId存储在变量上,然后使用它来调用下一个sp:

CREATE PROCEDURE [database].[rsp_person_getitembyid]
@Id UNIQUEIDENTIFIER
AS

DECLARE @NameId nvarchar(100);

SELECT @NameId = NameId
FROM person 
WHERE Id = @Id;

EXEC [database].rsp_personname @NameId;

更新

我真的不明白你想要什么。看起来像一个简单的JOIN就足够了:

SELECT *
FROM person p
INNER JOIN crm_personname pn
    ON p.Id = pn.Id
WHERE p.Id = @Id;
相关问题