消息137,级别15,状态2,行29必须声明标量变量“@ ACTIVE_STATUS”。 [英] Msg 137, Level 15, State 2, Line 29 Must declare the scalar variable "@ACTIVE_STATUS".

查看:606
本文介绍了消息137,级别15,状态2,行29必须声明标量变量“@ ACTIVE_STATUS”。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

ALTER PROCEDURE [dbo]。[S_EDIT_USER]

(@DSA_CODE VARCHAR(10)

,@ REQUESTOR_DEPT VARCHAR(40)

,@ ACTIVE_STATUS INT

,@ MAKER_ID VARCHAR(10)

,@ MAKER_IP VARCHAR(20)

,@ ERROR_CODE INT OUTPUT


AS

BEGIN



DECLARE @CNT INT;

DECLARE @SQL NVARCHAR(MAX);



--DECLARE @REQUESTOR_DEPT VARCHAR(40);

--print(@REQUESTOR_DEPT);

SELECT @CNT = COUNT(*)FROM TMAS_UAM_USER_TMP WHERE DSA_CODE = @DSA_CODE;



IF @CNT> 0

SET @ERROR_CODE = 1;

ELSE

SET @ERROR_CODE = 0;



如果@REQUESTOR_DEPT ='N'

SET @REQUESTOR_DEPT ='';

ELSE

SET @REQUESTOR_DEPT = @REQUESTOR_DEPT;

打印@REQUESTOR_DEPT;



IF @ERROR_CODE = 0



set @SQL ='INSERT INTO TMAS_UAM_USER_TMP(

DSA_CODE

,DSA_NAME

,DSA_CITY

,DSA_PRODUCT
,DSA_PHNO

,DSA_MOBNO

,DSA_RQSTR

,DSA_RQSTR_DEPT

,GROUP_ID

,ACTIVE_STATUS

,REQ_TYPE

,LAST_LOGED_IN

,CREATED_ID

,CREATED_IP
,CREATED_DATE

,MAKER_ID

,MAKER_IP

,MAKER_DATE

)SELECT DSA_COD

,DSA_NAM

,DSA_CTY

,PRODUCT

,DSA_PHO

,DSA_MOB

,REQUESTOR

,'+ @ REQUESTOR_ DEPT +'

,GROUP_ID

,@ ACTIVE_STATUS

,1

,LAST_LOG_DAT

,CREATED_ID

,CREATED_IP

,CREATED_DATE

,'+ @ MAKER_ID +'

,'+ @ MAKER_IP + '

,GETDATE()

来自DSA_MST WHERE DSA_COD ='+ @ DSA_CODE +'和';



如果@REQUESTOR_DEPT ='N'

开始

设置@SQL = @SQL +'REQUESTOR_DEPT为空';

print('如果查询'+ @ SQL);

结束

其他

开始

设置@SQL = @SQL +'REQUESTOR_DEPT ='''+ @REQUESTOR_DEPT +'''';

print('Else Query'+ @ SQL);

end



--EXEC sp_executesql @ SQL,N'@REQUESTOR_DEPT varchar(100)output',@ REQUESTOR_DEPT输出

--EXECUTE sp_executesql @SQL;

执行(@SQL);

RETURN @ERROR_CODE;

END

ALTER PROCEDURE [dbo].[S_EDIT_USER]
( @DSA_CODE VARCHAR(10)
,@REQUESTOR_DEPT VARCHAR(40)
,@ACTIVE_STATUS INT
,@MAKER_ID VARCHAR(10)
,@MAKER_IP VARCHAR(20)
,@ERROR_CODE INT OUTPUT
)
AS
BEGIN

DECLARE @CNT INT;
DECLARE @SQL NVARCHAR(MAX);

--DECLARE @REQUESTOR_DEPT VARCHAR(40);
--print(@REQUESTOR_DEPT);
SELECT @CNT = COUNT(*) FROM TMAS_UAM_USER_TMP WHERE DSA_CODE = @DSA_CODE;

IF @CNT > 0
SET @ERROR_CODE = 1;
ELSE
SET @ERROR_CODE = 0;

if @REQUESTOR_DEPT = 'N'
SET @REQUESTOR_DEPT = '';
ELSE
SET @REQUESTOR_DEPT = @REQUESTOR_DEPT ;
print @REQUESTOR_DEPT;

IF @ERROR_CODE = 0

set @SQL = 'INSERT INTO TMAS_UAM_USER_TMP (
DSA_CODE
,DSA_NAME
,DSA_CITY
,DSA_PRODUCT
,DSA_PHNO
,DSA_MOBNO
,DSA_RQSTR
,DSA_RQSTR_DEPT
,GROUP_ID
,ACTIVE_STATUS
,REQ_TYPE
,LAST_LOGED_IN
,CREATED_ID
,CREATED_IP
,CREATED_DATE
,MAKER_ID
,MAKER_IP
,MAKER_DATE
) SELECT DSA_COD
,DSA_NAM
,DSA_CTY
,PRODUCT
,DSA_PHO
,DSA_MOB
,REQUESTOR
,'+@REQUESTOR_DEPT+'
,GROUP_ID
,@ACTIVE_STATUS
,1
,LAST_LOG_DAT
,CREATED_ID
,CREATED_IP
,CREATED_DATE
,'+@MAKER_ID+'
,'+@MAKER_IP+'
,GETDATE()
FROM DSA_MST WHERE DSA_COD = '+@DSA_CODE+' and ';

if @REQUESTOR_DEPT = 'N'
begin
set @SQL = @SQL + 'REQUESTOR_DEPT is null';
print('If Query'+@SQL);
end
else
begin
set @SQL = @SQL + 'REQUESTOR_DEPT = ''' + @REQUESTOR_DEPT + '''';
print('Else Query'+@SQL);
end

--EXEC sp_executesql @SQL, N'@REQUESTOR_DEPT varchar(100) output', @REQUESTOR_DEPT output
--EXECUTE sp_executesql @SQL;
execute (@SQL);
RETURN @ERROR_CODE;
END

推荐答案

我认为你因为下面给出的突出显示的代码而收到错误。将它附加到变量,就像你为@REQUESTOR_DEPT变量做的那样 -



SELECT DSA_COD

,DSA_NAM

,DSA_CTY

,PRODUCT

,DSA_PHO

,DSA_MOB

,REQUESTOR

,'+ @ REQUESTOR_DEPT +'

,GROUP_ID

,@ ACTIVE_STATUS

,1

,LAST_LOG_DAT

,CREATED_ID

,CREATED_IP

,CREATED_DATE

,'+ @ MAKER_ID +'

,'+ @ MAKER_IP +'

,GETDATE()

来自DSA_MST WHERE DSA_COD ='+ @ DSA_CODE +'和';
i think you are getting error because of the highlighted code given below. Append it to the variable like you are doing for @REQUESTOR_DEPT variable -

SELECT DSA_COD
,DSA_NAM
,DSA_CTY
,PRODUCT
,DSA_PHO
,DSA_MOB
,REQUESTOR
,'+@REQUESTOR_DEPT+'
,GROUP_ID
,@ACTIVE_STATUS
,1
,LAST_LOG_DAT
,CREATED_ID
,CREATED_IP
,CREATED_DATE
,'+@MAKER_ID+'
,'+@MAKER_IP+'
,GETDATE()
FROM DSA_MST WHERE DSA_COD = '+@DSA_CODE+' and ';


使用proc来串行mash SQL并运行它,会被延迟。这是浪费时间,你可以在代码中做(但是,不要。)



@ACTIVE_STATUS在字符串中。因此,你传递的是这个文本,而不是传递的值。你需要对其他变量做同样的事情,'+ @ACTIVE_STATUS +'....



话虽如此,你的代码却是愚蠢的。 proc是有效的,当我复制,粘贴和创建它时不会出错。



你需要告诉我们什么行有错误,甚至可能尝试将此简化为一个基本示例,其中包含产生错误的最小代码。
Using a proc to string mash SQL and run it, is retarded. It's a waste of time, you may as well do it in code ( but, don't. )

@ACTIVE_STATUS is inside a string. As such, you're passing this text, NOT the value that was passed in. You need to do the same thing you did for the other variables, ' + @ACTIVE_STATUS + '....

Having said that, while your code is idiotic. the proc is valid and does not give an error when I copy, paste, and create it.

You need to tell us what line has the error, and perhaps even try to simplify this down to a basic example with the minimal code that gives the error.


这篇关于消息137,级别15,状态2,行29必须声明标量变量“@ ACTIVE_STATUS”。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆