請教,exists條件中的表名動態實現
一般情況下很少見到ys20041201中可以用動態參數
if not exists( SELECT * FROM ys20041201 where timev>= @val1 AND timev<@val2 AND p_no=@pno )
↓↓↓↓↓↓↓↓↓↓↓
declare @tabname nvarchar(15)
if not exists( SELECT * FROM @tabname where timev>= @val1 AND timev<@val2 AND p_no=@pno )
因為我存儲過程執行參數中帶有表名參數,我想實現類似的動態檢測存在某些數據
问题点数:20、回复次数:4Top
1 楼yingqing(曾明)回复于 2004-12-04 11:51:20 得分 0
用declare sysname @tabnameTop
2 楼zjcxc(邹建)回复于 2004-12-04 11:52:00 得分 20
declare @tabname nvarchar(15)
declare @s nvarchar(4000),@r bit
set @s='set @r=case when exists( SELECT * FROM '+@tabname+' where timev>= @val1 AND timev<@val2 AND p_no=@pno ) then 1 else 0 end'
exec sp_executesql @s,
N'@val1 varchar(20),@val2 varchar(20),@pno varchar(20)
@r bit out',
@val1,@val2,@pno
,@r out
if @r=1
begin
---存在记录的处理
end
else
begin
---不存在记录的处理
endTop
3 楼landlordh(work wonders)回复于 2004-12-04 14:06:10 得分 0
感謝邹建大哥幫助,但是有個問題不知何固:
declare @tabname nvarchar(15)
declare @val1 nvarchar(20)
declare @val2 nvarchar(20)
declare @pno nvarchar(20)
declare @s nvarchar(4000),@r bit
set @tabname='ys20041201'
set @val1='08:03'
set @val2='11:00'
set @pno='0000801'
set @s='set @r=case when exists( SELECT * FROM '+@tabname+' where timev>= @val1 AND timev<@val2 AND p_no=@pno ) then 1 else 0 end'
exec sp_executesql @s,
N'@val1 varchar(20),@val2 varchar(20),@pno varchar(20)
@r bit out',
@val1,@val2,@pno,@r out
if @r=1
begin
print('Y')---存在记录的处理
end
else
begin
print('N')---不存在记录的处理
end
出錯如下:
Server: Msg 170, Level 15, State 1, Line 2
Line 2: Incorrect syntax near '@r'.
Server: Msg 137, Level 15, State 1, Line 2
Must declare the variable '@pno'.
NTop
4 楼landlordh(work wonders)回复于 2004-12-04 14:51:59 得分 0
找到了問題所在,是少了個符號","
謝謝Top




