这里的问题是您要它选择
@colname
变量本身作为查询中的第一个值,
不
存储在变量中的列名的值。这相当于做:
SELECT @colname;
您需要做的是输出
@列名
变量转换为要传递给的SQL字符串
sp_executesql
. 只要
@列名
变量不是由用户输入的,您可以将其连接到传递给
sp_执行sql
,如下:
DECLARE @SqlQuery NVARCHAR(MAX);
SET @SqlQuery = N'set @categoryid = (select distinct ' + @colname + ' from ProductProperty
where PartNo = @PartNo and PPFNo = @PPFno and DName = @Dimension)';
EXEC sp_executesql @SqlQuery,
@PartNo nvarchar(20), @PPFno nvarchar(20),@Dimension
nvarchar(30), @categoryid NVARCHAR(MAX) OUTPUT', @PartNo, @PPFno,@Dimension,
@categoryid OUTPUT
select @categoryid, @colname, @PartNo
这将有效地为您提供:
EXEC sp_executesql N'set @categoryid = (select distinct T1 from ProductProperty
where PartNo = @PartNo and PPFNo = @PPFno and DName = @Dimension)',
@PartNo nvarchar(20), @PPFno nvarchar(20),@Dimension
nvarchar(30), @categoryid NVARCHAR(MAX) OUTPUT', @PartNo, @PPFno,@Dimension,
@categoryid OUTPUT