当前位置:主页>销售管理软件> 列表

SQL存儲過程中查詢條件以參數形勢的困惑 找仓库进销存账报表

进销存软件版1楼: SQL存儲過程中查詢條件以參數形勢的困惑

我在進行一個大批量的查詢時﹐得到結果后﹐
想根據用戶的要求再次篩選。

比喻 ﹕已經從多個表中得到了一個 @table
現在我要 id>50 and id<100 之間的數﹐而我就將
id>50 and id<100 賦給一個變量@searchtiao
在存儲過程中可不可以這樣﹕

select * from @table where @searchtioa

???

2楼: //动态游标
DECLARE @TableName VARCHAR(30), @FieldName VARCHAR(30)
DECLARE @SQL VARCHAR(200), @Cur VARCHAR(200), @Value VARCHAR(200)
SET @TableName = ''FeeDetail_Inpat''
SET @FieldName = ''RecID''
SET @SQL = ''DECLARE MyCursor CURSOR FOR SELECT MAX('' + @FieldName + '') FROM '' + @TableName
EXEC (@SQL)
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @Value
CLOSE MyCursor
DEALLOCATE MyCursor
PRINT @Value 如用友酒店管理软件

3楼: select * from @table where id>50 and id<100

4楼: 定义两个参数
@1,@2
select * from @table where id>@1 and id<@2

5楼: 表名,字段名不能做为参数,只有值才能做为参数
你的要求动态SQL能实现,用exec调用

6楼: 我現在已做到這一步了
問題是這樣的﹕

declare @sql nvarchar(2000)

Declare @StatusTmp Table
(
fid int not null,
fdate nvarchar(30),
fbillName nvarchar(20),
fbillNo nvarchar(20),
fbillSelfno nvarchar(20),
fcompany nvarchar(50),
fSubmitFlag bit not null default 0,
fCancelFlag bit not null default 0,
fFinishFlag bit not null default 0,
fcreauser nvarchar(20),
fmodiuser nvarchar(20) ,
fremark nvarchar(200)
)
如果這個表
用 select * from @statusTMP 是可以運行的
但是我現在改成這樣﹕
declare @sql nvarchar(1000)
delcare @tiao nvarchar(500)
select @tiao=''fid>50 and fid<100''
select @sql=''Select * from ''+@statusTMP+'' where ''+@tiao
exec @sql

這樣說是報錯呀﹗﹗﹗

进销存软件版7楼: declare @sql nvarchar(200)
declare @searchtiao nvarchar(100)
declare @TableName nvarchar(50)
Declare @StatusTmp Table
(
fid int not null,
fdate nvarchar(30),
fbillName nvarchar(20),
fbillNo nvarchar(20),
fbillSelfno nvarchar(20),
fcompany nvarchar(50),
fSubmitFlag bit not null default 0,
fCancelFlag bit not null default 0,
fFinishFlag bit not null default 0,
fcreauser nvarchar(20),
fmodiuser nvarchar(20) ,
fremark nvarchar(200)
)

set @tableName=@StatusTmp
set @Searchtiao=''fid>0''

set @sql=''Select * from ''+@TableName+'' where ''+@Searchtiao

Exec @sql

就是這樣的語句為何會錯﹐錯在那里﹖

8楼: 我试过,可以加条件

DECLARE @TableName VARCHAR(30), @FieldName VARCHAR(30)
DECLARE @SQL VARCHAR(200), @Cur VARCHAR(200), @Value VARCHAR(200), @Where VARCHAR(200)
SET @TableName = ''FeeDiary_Outpat''
SET @FieldName = ''BillCode''
SET @Where = '' WHERE ReckDate <''''2005-12-30''''''
SET @SQL = ''DECLARE MyCursor CURSOR FOR SELECT MAX('' + @FieldName + '') FROM '' + @TableName + @Where
PRINT @SQL
EXEC (@SQL)
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @Value
CLOSE MyCursor
DEALLOCATE MyCursor
PRINT @Value

9楼: 不行的
因為我定義的表是這樣的﹕
Declare @StatusTmp Table
如果定義為
Declare Table #StatusTmp
就可以進行
set @tableName=#StatusTmp
set @sql=''Select * from ''+@TableName+'' where ''+@Searchtiao
否則總是說我的那個 @StatusTmp 沒有找到

我已試了多次了
為何定義為#StatusTmp行﹐而@StatusTmp不行
而這兩 者的功能在存儲過程中都一樣呢﹖﹖﹖

10楼: set @sql=''Select * from ''+@TableName+'' where ''+@Searchtiao
把@TableName改成前一个查询的语句set @SQLtext=''(select....) as tabel1''
set @sql=''Select * from ''@SQLtext+'' where ''+@Searchtiao
exec sp_executesql @SQL

11楼: 不行呀
我試了

12楼: 来自:flysand, 时间:2006-1-7 9:08:01, ID:3321030
set @sql=''Select * from ''+@TableName+'' where ''+@Searchtiao
把@TableName改成前一个查询的语句set @SQLtext=''(select....) as tabel1''
set @sql=''Select * from ''@SQLtext+'' where ''+@Searchtiao
exec sp_executesql @SQL
------------------------------------------------------------------

這樣真的不行呀 如仓库进销存账报表

13楼: 为什么不行!
set @SQLtext=''(select....) as tabel1''--括号内是你第一个查询的SQL语句串,
set @sql=''Select * from ''+@SQLtext+'' where ''+@Searchtiao--从第一个查询查询条件为@Searchtiao的记录
你可以在后面加上print @sql检查你的语句对不对

进销存软件版14楼: 帮顶!

-------------------------------------
站长开发推广同盟 关注网站,关注技术!

海量源代码下载,二次开发绝佳站点

网址: http://www.source520.com
http://www.source520.net

15楼: 多人接受答案了。