首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

【求望】【动态SQL】列名为变量时,where子句后面是表单上得到的变量

2013-08-25 
【求看】【动态SQL】列名为变量时,where子句后面是表单上得到的变量列名为变量时,where子句后面是表单上得到的

【求看】【动态SQL】列名为变量时,where子句后面是表单上得到的变量
列名为变量时,where子句后面是表单上得到的变量

存储过程
create proc  sp_xs
@JGBZ nVARCHAR(50),
@column1 nVARCHAR(50)

as
declare @sel nvarchar(500)

用下面语句:
exec sp_executesql N'select  @column1  from 刻蚀 where 加工步骤=@JGBZ'
执行
sp_xs'P+ET','SRJY'
结果为:空,搜不到记录

-------------------------------------

用下面语句:
--set @sel = 'select '+ @column1+' from 刻蚀 where 加工步骤=''+ @JGBZ +'''
 Exec(@sel)
执行
sp_xs'P+ET','SRJY'

结果为:
必须声明变量 '@column1'。                  求各位大虾赐教!!!

动态SQL
[解决办法]

CREATE proc  sp_xs
@JGBZ nVARCHAR(50),
@column1 nVARCHAR(50)

as
declare @sel nvarchar(500)
set @sel = 'select '+ @column1+' from 刻蚀 where 加工步骤='''+ @JGBZ +''''
 EXEC (@sel)

[解决办法]
alter proc  sp_xs
@JGBZ NVARCHAR(50),
@column1 nVARCHAR(50)
as
declare @sel nvarchar(500)
SET @sel = N'select ' + @column1 + ' from 刻蚀 where 加工步骤=@JGBZ'--#2.字段名,表名,无法用传参的方式动态。想动态只能拼SQL
exec sp_executesql @sel, N'@JGBZ NVARCHAR(50)', @JGBZ--#1.缺少后面两个参数
GO

EXEC sp_xs 'P+ET','SRJY'
GO

CREATE proc  sp_xs1
@JGBZ nVARCHAR(50),
@column1 nVARCHAR(50)
as
declare @sel nvarchar(500)
set @sel = 'select '+ @column1+' from 刻蚀 where 加工步骤='''+ @JGBZ +'''' --这儿少了'号
--PRINT @sel
Exec(@sel)
GO

EXEC sp_xs1 'P+ET','SRJY'
GO

热点排行