存储过程参数加入sql语句

wuxiaoqqqq 2008-03-27 04:45:41
DECLARE @companyType nvarchar(200);
DECLARE @whereType NVARCHAR(200);
declare @id varchar(300),@m int,@n int;
DECLARE @companyID int;
set @companyID=117
set @companyType='AwardingAgency,CMatRisk,Oversight';
SET @companyType = @companyType+',';
SET @whereType = ' (0=1 ';
set @m=CHARINDEX(',',@companyType)
set @n=0
WHILE @m>0
BEGIN
set @id=substring(@companyType,@n,@m-@n)
IF( @id='AwardingAgency')
SET @whereType =@whereType + ' OR a.AllowAwardingAgencyView = 1'
ELSE IF(@id='CMatRisk')
SET @whereType =@whereType + ' OR a.AllowCMatRiskView=1';
ELSE IF(@id='Oversight')
SET @whereType =@whereType + ' OR a.AllowOversightAgencyView=1';
ELSE IF(@id='Contractor')
SET @whereType =@whereType + ' OR a.AllowContractorView=1';
ELSE IF(@id='ApplicationAdministrator')
SET @whereType=@whereType + ' OR a.AllowApplicationAdministratorView=1';
set @n=@m+1 ;
set @m=CHARINDEX(',',@companyType,@n) ;
END

select distinct a.TabName from Tabs a inner join Tabs b on b.TabID=a.ParentTab
where ******+@whereType+****** and b.TabName in
(
SELECT distinct ModuleName FROM AgencyModules
WHERE CompanyID in
(
select distinct a.AwardingAgencyCompanyID
from Projects a inner join CompanyProject b on a.ProjectID=b.ProjectID
where A.AwardingAgencyCompanyID=@companyID OR A. OwnerCompanyID=@companyID
OR A.PrimeContractorCompanyID=@companyID OR B.CompanyID=@companyID
)
)

这是我写的储存过程,我想把@whereType加到这个sql语句,请问有什么好法子没?


...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxiaoqqqq 2008-03-27
  • 打赏
  • 举报
回复
行了,搞完了。
把@companyid的类型转了一下。
ojuju10 2008-03-27
  • 打赏
  • 举报
回复

ltrim(@companyID) 可以转换为字符型
-狙击手- 2008-03-27
  • 打赏
  • 举报
回复
exec('select distinct a.TabName  from Tabs a inner join Tabs b on b.TabID=a.ParentTab 
where '+@whereType+' and b.TabName in
(
SELECT distinct ModuleName FROM AgencyModules
WHERE CompanyID in
(
select distinct a.AwardingAgencyCompanyID
from Projects a inner join CompanyProject b on a.ProjectID=b.ProjectID
where A.AwardingAgencyCompanyID=@companyID OR A. OwnerCompanyID=@companyID
OR A.PrimeContractorCompanyID=@companyID OR B.CompanyID=@companyID
)
) ')
wuxiaoqqqq 2008-03-27
  • 打赏
  • 举报
回复
这样不行啊,下面的@companyID用不了。
nextflying 2008-03-27
  • 打赏
  • 举报
回复
动态SQL 先进行strSQl编写 , 然后 Exec(strSql)
pt1314917 2008-03-27
  • 打赏
  • 举报
回复

select distinct a.TabName from Tabs a inner join Tabs b on b.TabID=a.ParentTab
where ******+@whereType+****** and b.TabName in
(
SELECT distinct ModuleName FROM AgencyModules
WHERE CompanyID in
(
select distinct a.AwardingAgencyCompanyID
from Projects a inner join CompanyProject b on a.ProjectID=b.ProjectID
where A.AwardingAgencyCompanyID=@companyID OR A. OwnerCompanyID=@companyID
OR A.PrimeContractorCompanyID=@companyID OR B.CompanyID=@companyID
)
)
---改为:
exec('select distinct a.TabName from Tabs a inner join Tabs b on b.TabID=a.ParentTab
where '+@whereType+' and b.TabName in
(
SELECT distinct ModuleName FROM AgencyModules
WHERE CompanyID in
(
select distinct a.AwardingAgencyCompanyID
from Projects a inner join CompanyProject b on a.ProjectID=b.ProjectID
where A.AwardingAgencyCompanyID=@companyID OR A. OwnerCompanyID=@companyID
OR A.PrimeContractorCompanyID=@companyID OR B.CompanyID=@companyID
))')
nextflying 2008-03-27
  • 打赏
  • 举报
回复
cast(@companyID as varchar(100)) 加上
wuxiaoqqqq 2008-03-27
  • 打赏
  • 举报
回复
就是在我打****的地方,我想加这个参数进去。
大家帮帮忙,我搞了半天了。
用set @s='前面' +@whereType+ '后面'
的话,我后面的@companyID就不能用了。
要把@companyID提出来的话,它是int型的,说不能直接加。
大家给个解决方法咯。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧