读书人

【求望】【动态SQL】列名为变量时wh

发布时间: 2013-08-25 10:49:56 作者: rapoo

【求看】【动态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

读书人网 >SQL Server

热点推荐