日期:2014-05-17 浏览次数:20777 次
USE [SAP]
GO
/****** Object: StoredProcedure [dbo].[SP_EMT_APP_STORE_AUTH] Script Date: 08/29/2012 12:17:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[SP_EMT_APP_STORE_AUTH]
@COMP_CODE CHAR(4),
@BADGE CHAR(8),
@OBJ_ID CHAR(10),
@VAL VARCHAR(50),
@HAS_AUTH bit OUTPUT
AS
declare @LEN int
declare @SQL NVARCHAR(500)
declare @STR varchar(200)
declare @flag varchar(5)
set @LEN=len(@VAL)
set @STR=' (VAL='+ @VAL+' OR '
WHile (@LEN>0)
begin
set @LEN=@LEN-1
set @STR=@STR+' VAL='+left(@VAL,@LEN)+'* OR '
end
set @STR=' 1<>1)'
set @SQL=' select @flag=''1'' from MT_GRP_LIST G INNER JOIN MT_GRP_OBJ AS O ON G.GRP_ID = O.GRP_ID'
set @SQL=@SQL+' INNER JOIN MT_AUTH_GRP_DETAIL AS M ON G.GRP_ID =M.GRP_ID'
set @SQL=@SQL+' WHERE BADGE = @BADGE AND COMP_CODE = @COMP_CODE AND OBJ_ID = @OBJ_ID'
set @SQL=@SQL+' AND'+'('+ @STR+')'
execute sp_executesql @SQL,N'@flag varchar output',@BADGE,@COMP_CODE,OBJ_ID,@flag output
IF(@flag=1)
SET @HAS_AUTH = 1
ELSE
SET @HAS_AUTH=0
ALTER PROCEDURE [dbo].[Sp_emt_app_store_auth]
@COMP_CODE CHAR(4),
@BADGE CHAR(8),
@OBJ_ID CHAR(10),
@VAL VARCHAR(50),
@HAS_AUTH BIT OUTPUT
AS
DECLARE @LEN INT
DECLARE @SQL NVARCHAR(500)
DECLARE @STR VARCHAR(200)
DECLARE @flag VARCHAR(5)
SET @LEN=Len(@VAL)
SET @STR=' (VAL=' + @VAL + ' OR '
WHILE ( @LEN > 0 )
BEGIN
SET @LEN=@LEN - 1
SET @STR=@STR + ' VAL=' + LEFT(@VAL, @LEN) + '* OR '
END
SET @STR=' 1<>1)'
SET @SQL=' select @flag=''1'' from MT_GRP_LIST G INNER JOIN MT_GRP_OBJ AS O ON G.GRP_ID = O.GRP_ID'
SET @SQL=@SQL
+ ' INNER JOIN MT_AUTH_GRP_DETAIL AS M ON G.GRP_ID =M.GRP_ID'
SET @SQL=@SQL
+ ' WHERE BADGE = @BADGE AND COMP_CODE = @COMP_CODE AND OBJ_ID = @OBJ_ID'
SET @SQL=@SQL + ' AND' + '(' + @STR + ')'
EXECUTE Sp_executesql
@SQL,
N'@flag varchar output,@BADGE CHAR(8),@COMP_CODE CHAR(4),@OBJ_ID CHAR(10),@flag VARCHAR(5)',-----把你的变量都在这里定义,这是动态SQL 调用 Sp_executesql 存储过程的语法规则。如果是 exec(@sql) 就不需要了
@BADGE,
@COMP_CODE,
@OBJ_ID,
@flag output
IF( @flag = 1 )
SET @HAS_AUTH = 1
ELSE
SET @HAS_AUTH=0
------解决方案--------------------
EXECUTE Sp_executesql
@SQL,
N'@BADGE CHAR(8),@COMP_CODE CHAR(4),@OBJ_ID CHAR(10),@flag varchar output',-----把你的变量都在这里定义,这是动态SQL 调用 Sp_executesql 存储过程的语法规则。如果是 exec(@sql) 就不需要了
@BADGE,
@COMP_CODE,
@OBJ_ID,
@flag output
-----参数的先后顺序也须保持一致
------解决方案--------------------
execute sp_executesql @SQL,N'@flag varchar output, @COMP_CODE CHAR(4),@BADGE CHAR(8),@OBJ_ID CHAR(10),@VAL VARCHAR(50),',@BADGE,@COMP_CODE,@OBJ_ID,@flag OUTPUT
------解决方案--------------------
SET @STR=' 1<>1)'
------解决方案--------------------
try
ALTER PROCEDURE [dbo].[Sp_emt_app_store_auth]
@COMP_CODE CHAR(4),
@BADGE CHAR(8),
@OBJ_ID CHAR(10),
@VAL VARCHAR(50),
@HAS_AUTH BIT OUTPUT
AS
DECLARE @LEN INT
DECLARE @SQL NVARCHAR(500)
DECLARE @STR NVARCHAR(200)
DECLARE @flag VARCHAR(5)
SET @LEN=Len(@VAL)
SET @STR=N' (VAL=@VAL OR '
WHILE ( @LEN > 0 )
BEGIN
SET @LEN=@LEN - 1
SET @STR=@STR + N' VAL=LEFT(@VA