Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在存储过程中使用SELECT输出变量_Sql Server_Tsql - Fatal编程技术网

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

Sql server 在存储过程中使用SELECT输出变量,sql-server,tsql,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;

我是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存储在两个表中

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

    EXEC [database].rsp_personname NameId;
任何帮助都将不胜感激


谢谢

您应该将
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;
更新

我真的不明白你想要什么。似乎一个简单的
连接就足够了:

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

您应该将
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;
更新

我真的不明白你想要什么。似乎一个简单的
连接就足够了:

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

如果删除
EXEC[database].rsp\u personname NameId
存储过程是否成功执行?是的,没有它,它可以正常工作。您可以发布[database].rsp_personname的源代码吗?如果您删除
EXEC[database].rsp_personname NameId,我现在已将帖子更新为包含
rsp_personname
存储过程是否成功执行?是的,没有它,它可以正常工作。您可以发布[database].rsp_personname的源代码吗?我已经更新了帖子,包含
rsp_personname
,谢谢您的回答,但我还需要获取所有其他字段以及NameId列。@SamBunting然后你应该在问题中发布你真正想要的内容。@SamBunting我不太清楚你想要什么,但用我了解的内容更新了我的答案。我现在用一种不同的方式使用父id。不管怎样,我都会接受你的答案,因为它确实起作用了,这可能会帮助更多看到这一点的人。谢谢你的回答,但我还需要获取所有其他字段以及NameId列。@SamBunting那么你应该在你的问题中发布你真正想要的内容。@SamBunting我不太清楚你想要什么,但是用我所了解的更新了我的答案,我现在用一种不同的方式使用了家长id。不管怎样,我都会接受你的答案,因为它确实有效,而且它可能会帮助更多看到这一点的人。