2014-02-25 39 views
1

我有一个存储过程,它将列名以及表名作为参数。如何将列名以及表名作为SQL Server中的参数传递给存储过程?

ALTER PROCEDURE [dbo].[usp_TableReporting_GetColumnNamesAndValues] 
    @concatstring AS VARCHAR(100), 
    @Tablename as VARCHAR(100) 
AS 
BEGIN 
    SELECT @concatstring FROM @Tablename 
END 

这个过程给我一个错误:

必须声明标量变量@tablename

虽然我已经宣布它的顶部。

+0

您HV使用动态SQL – KumarHarsh

+0

错误*应*说,你必须声明*表变量'@ TableName'而不是说* *标变量。 –

回答

4

使用动态SQL:

ALTER PROCEDURE [dbo].[usp_TableReporting_GetColumnNamesAndValues] 
@concatstring AS VARCHAR(100), 
@Tablename as VARCHAR(100) 

AS 
BEGIN 
    Declare @mystring varchar(max) = N'select ' + @concatstring + ' from ' + @Tablename 
    exec (@mystring) 

END 
+0

它给了我错误 程序执行失败 42000 - [SQL Server]找不到存储过程'从ChamberTest中选择轴。 –

+0

在执行..错过了括号.. :),更新了我的答案 – Milen

相关问题