我有以下存储过程:
create procedure new (@user nvarchar(50))
as
Declare @ids uniqueidentifier
set @ids = (
select id from table6 where name = @user and @ids = id)
SELECT * from table1 as 1, table2 as 2
where 1.id = @ids
它没有返回正确的结果 - 它什么也没有返回。它似乎将变量(@ids
)传递为空。
答案 0 :(得分:1)
您获得空结果的原因是您在为其分配任何内容之前尝试使用@ids
。在您获得@ids
值的查询中,您使用它来过滤掉@ids = id
的记录,但当时@ids
为null
,结果将为空@ids
将保留null
。
我假设您只想删除该部分条件,除非您有其他值可用于比较id
字段。
无论如何,我看不出你怎么能创建程序......你不能使用数字作为别名,使用标识符:
SELECT * from table1 as t1, table2 as t2
where t1.id = @ids
答案 1 :(得分:0)
您传递 @ids
- 您在本地声明。由于它没有任何价值,当你在WHERE
子句中使用时,你没有得到任何记录,因此@ids
将为NULL。
我想你想要
set @ids = (
select id from table6 where name = @user)
但你甚至不需要 - 只是这样做:
SELECT * from table1 t1, table2 t2
where t1.id = (select id from table6 where name = @user)
将CROSS JOIN
返回T1和T2的每个记录组合。 - 这可能是你想要的,只是想确定指出这一点。