我在SQL SERVER
中使用了一个函数,并使用select和after设置了一个用户变量。但似乎设置不起作用。
--@id is input
Declare @result varchar(MAX)
SELECT @result = INFO FROM USER_INFO WHERE ID= +''+'DOMAIN\'+@id+''
IF @result IS NULL
SET @result = 'DOMAIN\'+@id+''
return (@result)
如果找不到用户,我想选择id而不是空值。但似乎它永远是空的 Set在条件语句中不起作用。 我做错了什么?
以下是更新:
是滑的,我检查了它的空白。如果我设置
SET @result ='MY ID'
虽然有效,但@result = 'DOMAIN\'+@id
无效
整个功能
FUNCTION [dbo].[USER_INFO]
(
-- Add the parameters for the function here
@id varchar(300)
)
RETURNS varchar(MAX)
AS
BEGIN
Declare @result varchar(MAX)
SELECT @result = INFO FROM USER_INFO WHERE ID= +''+'DOMAIN\'+@id+''
IF @result IS NULL
SET @result = 'DOMAIN\'+@id+''
return (@result)
END
答案 0 :(得分:1)
如果真的是整个功能,你需要第一行是"创建功能" (或" ALTER FUNCTION"如果它已经存在),而不仅仅是" FUNCTION" ...
这将消除函数返回NULL:
DECLARE @result VARCHAR(MAX)
-- Eliminate NULL being passed in so string concatenation doesn't return NULL
IF @id IS NULL
SET @id = ''
-- Set the output value...if nothing exists, set it to 'x'
SET @result = (SELECT TOP 1 ISNULL(INFO,'x') FROM USER_INFO WHERE ID = 'DOMAIN\' + @id);
-- Now, neither @result OR @id will be NULL so the following should always return something other than NULL
IF @result = 'x'
SET @result = 'DOMAIN\' + @id
RETURN (@result)
答案 1 :(得分:0)
根据其他评论,试试这个:
Declare @result varchar(MAX)
SELECT @result = INFO FROM USER_INFO WHERE ID= 'DOMAIN\'+@id
IF @result IS NULL
SET @result = 'DOMAIN\'+ ISNULL(@id, '')
return (@result)
我认为你不需要所有用引号和加号来处理
答案 2 :(得分:0)
你应该这样试试。最后不需要那些额外的''
单引号
Declare @result varchar(MAX)
SELECT @result = INFO FROM USER_INFO WHERE ID= 'DOMAIN\' + @id
IF @result IS NULL
SET @result = 'DOMAIN\' + @id
return (@result)
很少提及:您的函数名称和表名称都相同user_info
。尝试以不同的方式命名它们,如
FUNCTION [dbo].[Get_USER_INFO]
(
-- Add the parameters for the function here
@id varchar(300)
)
SELECT @result = INFO FROM USER_INFO
此外,您应该调用您的函数
select dbo.Get_USER_INFO('my-user_id')
答案 3 :(得分:0)
select和set之间的区别在于,如果set没有找到任何值,那么它将返回null但是如果select没有找到任何值,那么它将显示变量的先前值,同样的情况正在发生当@result值为null时,选择不分配任何值并返回相同的先前值而不是赋值null,这就是if语句为false且不移动到Set语句的原因。
koppinjo,如果@result变量从未设置为任何东西,那么它应该击中该块,但我想第一次@result变量值不为null因此它不会击中该块。
请查看此内容以获得更多说明。