我想知道,如何在SQL语句中包含变量,以进一步说明我的问题,这是代码
declare @PartNo as nvarchar(20)
declare @PPFno as nvarchar(20)
declare @Dimension as nvarchar(30)
declare @cursor CURSOR
declare @colname as nvarchar(30)
declare @top as integer
declare @query as nvarchar(MAX)
declare @categoryid NVARCHAR(MAX)
set @cursor = CURSOR FOR
(select [Name] from sys.columns where object_id = (select object_id from sys.tables where name = 'ProductProperty') and [Name] like 'T%' and [name] <> 'TEMP')order by [Name] asc
OPEN @cursor
FETCH NEXT
FROM @cursor INTO @colname
WHILE @@FETCH_STATUS = 0
BEGIN
--set @query = (select @colname from ProductProperty where PartNo = @PartNo and PPFNo = @PPFno )
--set @query = 'select distinct '+@colname+' from ProductProperty where PartNo = '''+@PartNo+''' and PPFNo = '''+@PPFno+''' and DName = '''+@Dimension+''''
BEGIN
EXEC sp_executesql N'set @categoryid = (select distinct @colname from ProductProperty where PartNo = @PartNo and PPFNo = @PPFno and DName = @Dimension)',
N'@colname nvarchar(30), @PartNo nvarchar(20), @PPFno nvarchar(20),@Dimension nvarchar(30), @categoryid NVARCHAR(MAX) OUTPUT', @colname,@PartNo, @PPFno,@Dimension, @categoryid OUTPUT
select @categoryid,@colname ,@PartNo
END
--end
FETCH NEXT
FROM @cursor INTO @colName
END
CLOSE @cursor
DEALLOCATE @cursor
请注意我没有包含变量类型。我只想知道@colname
如何成为SQL语句的一部分。
详细说明。使用此代码,我收到了这些数据
其中T1
是表名。我想创建一个查询,在其中可以将表名传递给变量,然后检索该查询的内容。
因此,SQL查询应如下所示:
select T1 from ProductProperty
但是我没有收到查询,而是收到了上面截图中的变量数据。
问题是,如果您可能在我的代码中注意到,则将变量@categoryid
作为输出参数。这是检查查询的内容。
似乎我正在生成一个看起来像这样的查询
select 'T1' from ProductProperty
请问,我在做什么错?如果您需要其他信息,请告诉我。
编辑:
完成查询以进一步说明
答案 0 :(得分:1)
这里的问题是,您告诉它选择@colname
变量本身的值作为查询中的第一个值,而不是存储在列名中的列名的值。变量。这等效于:
SELECT @colname;
您需要做的是将@colname
变量的值输出到要传递给sp_executesql
的SQL字符串中。只要用户未输入@colname
变量,就可以将其连接到传递给sp_executesql
的字符串中,如下所示:
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