22,210
社区成员
发帖
与我相关
我的任务
分享
CREATE PROC myepatest
@EPA002 VARCHAR(10), --员工信息字段
@EPA003 VARCHAR(80), --员工信息字段
@EPA004 VARCHAR(40) --员工信息字段
AS
BEGIN
DECLARE @R VARCHAR(1000)
DECLARE @fieldname VARCHAR(10) --CMSFIE表中存储的字段名
DECLARE @nsql NVARCHAR(1000)
DECLARE mycursor CURSOR
FOR
SELECT (SUBSTRING(FIE003, 1, 6)) Field
FROM CMSFIE
WHERE FIE002 = 'vCMSEPA'
AND FIE019 = '1' --从CMSFIE表中读出必填字段名
OPEN mycursor
FETCH NEXT FROM mycursor INTO @fieldname
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @nsql = 'if (@' + @fieldname + '='''') or (@' + @fieldname +
' is null) set @R=''x'' else set @R= ''y'' '
--EXEC (@nSQL)
---执行时报错 @EPA002,@EPA003 ,@R变量没有定义
----------- 建议 ---------------------
--不一定马上能用,但大致思路是这样,要根据你的需求和实际运行的效果来修改
--先打印出SQL,便于核对
PRINT @nsql
--带参数的动态SQL, 必须用 sp_executesql ,并按规范给参数赋值
EXEC sp_executesql
@nsql
,'@EPA002 varchar(10)
,@EPA003 VARCHAR(80)
,@EPA004 VARCHAR(40)
,@R varchar(1000)'
,@EPA002
,@EPA003
,@EPA004
,@R
FETCH NEXT FROM mycursor INTO @fieldname
END
CLOSE mycursor
DEALLOCATE mycursor