存储如何执行变量输出到另一个变量SQL

存储如何执行变量输出到另一个变量SQL,sql,sql-server,Sql,Sql Server,以下是我的片段: create procedure sp (@pre nvarchar(50), @count nvarchar(50)) as declare @preval nvarchar(500); declare @countval nvarchar(500); select @preval = 'select '+ @prefix + ' from tblc' select @countval= 'select '+ @counter + ' from tblc' exec

以下是我的片段:

create procedure sp (@pre nvarchar(50), @count nvarchar(50))
as
declare @preval nvarchar(500); 
declare @countval nvarchar(500);

select @preval = 'select '+ @prefix  + ' from tblc'
select @countval= 'select '+ @counter  + ' from tblc'

exec sp_executesql @preval,@countval

pre和count是一个2输入参数,它给出了动态的“columnsname1”和“columnname2”。我想建立一个查询/sp,它给我特定列中的值,我想将它们存储在sp中的两个不同或单个变量中。直到现在我得到了我不想要的列名,我想要特定列中的值。我还想要第三个变量中的值!如果有任何疑问,请告诉我。

好吧。。。假设您的示例是伪代码,并且不希望一字不差地工作,那么您可以从阅读sp_executesql的工作原理中获益——注意第二个参数不是要执行的后续命令

完成此操作后,您可以尝试以下操作:

create procedure sp (@prefix nvarchar(50), @counter nvarchar(50)) 
as 
declare @preval nvarchar(500);  
declare @countval nvarchar(500);  
select @preval = 'select '+ @prefix  + ' from tblc' 
select @countval= 'select '+ @counter  + ' from tblc' 

declare @cmd as nvarchar(500);
set @cmd = @preval+';'+@countval 
exec sp_executesql @cmd
…祈祷有人不要这样做

sp '1; delete',''
就我个人而言,我会问你为什么觉得有必要走这条路

但是,您可能会发现,如果您阅读了sp_executesql,并查看以下示例,您将找到一种获得所需内容的方法。我猜“tblc”表只有一行

declare @sql as nvarchar(4000)
declare @p1 as integer

set @sql = 'select @p1=count(*) from tblc'
exec sp_executesql @sql, N'@p1 int output', @p1 output

select @p1

该过程将不起作用:您有参数
@pre
@count
,但在过程中使用名称
@前缀
@计数器
。当你解决这个问题时,它会起作用,至少对我来说是这样。哦,你使用哪种关系数据库?SQL Server?SQL不是这样设计的。不要试图变得聪明,构建通用代码。您也不能将记录集的输出存储在SQL注入警告的计数器+1中,并询问为什么要这样做。