原句是对动态表的字段进行比较然后用处理好的变量进行UPDATE操作。现由于变量值中有:号所以EXEC()出错。问题类似如下EXEC(。。。):
declare @时间 CHAR(20)
DECLARE @小时 CHAR(20)
DECLARE @分钟 CHAR(20)
DECLARE @TEST CHAR(20)
- SET @分钟 = '27'
- SET @小时 = '09'
- SET @时间 = LTRIM(RTRIM(@小时)) +':'+ LTRIM(RTRIM(@分钟))
EXEC('SELECT ''@TEST'' = (LTRIM(RTRIM(' + @时间)
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: ':' 附近有语法错误。
---------------------------------------------------------------
这样可以么?
SET @分钟 = '27'
SET @小时 = '09'
SET @时间 = LTRIM(RTRIM(@小时)) +':'+ LTRIM(RTRIM(@分钟))
print @时间
--EXEC('SELECT ''@TEST'' = (LTRIM(RTRIM(' + @时间)
select @test=LTRIM(RTRIM(@时间))
print @test
---------------------------------------------------------------
這樣改一下吧(改動很少):
Create ##myTable (isChange int)
insert into ##myTable values(0)
WHILE exists(select * from ##mytable where isChange=0) and @异常标识 <30
BEGIN
SET @异常字段名称 = '异常打卡时间'
SET @异常标识 = @异常标识 +1
SET @异常字段名称 = LTRIM(RTRIM(@异常字段名称)) + RTRIM(LTRIM(CAST(@异常标识 AS CHAR(2))))
EXEC('IF (SELECT ' + @异常字段名称 + ' FROM ' + @tablename + 'WHERE 电脑工号 = ' + @工号 + ' AND 日期 = LTRIM(RTRIM(' + @日期 + '))) = ''0''
BEGIN
UPDATE ' + @tablename + ' SET ' + @异常字段名称 + ' = TRIM(RTRIM(' + @时间+ ')) ,异常状态 = 2 WHERE current of 考勤明细资料游标
update ##mytable set isChange=1
END')
CONTINUE
end
drop table ##myTable
---------------------------------------------------------------
declare @时间 CHAR(20)
DECLARE @小时 CHAR(20)
DECLARE @分钟 CHAR(20)
DECLARE @TEST CHAR(20)
- SET @分钟 = '27'
- SET @小时 = '09'
- SET @时间 = LTRIM(RTRIM(@小时)) +':'+ LTRIM(RTRIM(@分钟))
EXEC('SELECT ''@TEST'' = (LTRIM(RTRIM(''' + @时间)+ '''))')