2013-06-21 33 views
1

我有2个表。在table1我有一些行像这样的人:替换SQL Server中SELECT语句中的列的单引号

  1. PersonX - ID
  2. PersonX - 名称
  3. PersonX - 地址
  4. PersonY - ID
  5. PersonY - 年龄

在第二张表中,上面提到的ID, NAME,ADDRESS,AGE将是栏。我们在这里有personX和PersonY的详细数据。

现在,主要的问题是在存储过程中,使用光标,我在变量存储@Elementtable1'ID', 'Name', ...)。

现在我正在使用作为下同游标select语句:

SELECT @Element From Table2 

我需要的用户的细节,如他的身份证,年龄,地址等输出,但不是我得到输出'ID', 'NAME', 'AGE'等... 。

我发现,这是因为@Elementvarchar,具有字符串值,因此选择语句如下执行:

SELECT 'ID' from table2. 

但我需要的是像下面

SELECT ID FROM TABLE2 

我用替换功能,它不是为我工作。案例功能,我无法使用它,因为我们无法说出table1中某个人的数据。它有所不同。我需要一个可用于所有记录的动态语句。而不是为每个记录执行大小写。

SELECT REPLACE(@Element,'''','') 
FROM TABLE2 

(仍然得到 'ID' 作为输出,而不是在表2换算值)

请帮我在这。希望你能理解我的解释

+0

如果你想在'SELECT'中**参数化**表或列名,你必须使用**动态SQL ** - 将你的SQL语句创建为NVARCHAR(x)变量,然后执行你已经建立的SQL语句。没有其他办法可以做到这一点。 –

回答

0

您将需要使用动态SQL来实现这一点,例如:

CREATE TABLE Table1 
(
    ID INT 
    ,Name VARCHAR(255) 
    ,ADDRESS VARCHAR(255) 
) 

INSERT Table1 VALUES ('1','Joe Bloggs','Address 1') 
INSERT Table1 VALUES ('2','Jane Doe','Address 2') 

DECLARE @ColName VARCHAR(255) = 'ID' 

DECLARE @SQL VARCHAR(MAX) 

SET @SQL = 'SELECT '[email protected]+','+''''[email protected]+''' FROM TABLE1' 

EXEC (@SQL) 

在返回的第一列,就是要能够执行SQL然而,在我的查询的第二列中,此刻就是你正在做的事情。就SQL而言,你的变量只是存储一个值。它不知道你指的是一个列名,这就是为什么它只是返回值。

+0

谢谢,可能是我可以使用这个。但我想知道除了使用动态SQL之外,还有其他选择。因为prevously我们修改并替换了所有的动态SQL。 – Pathrudu

+0

在上面的解释中。解决方案是使用动态SQL。但是,如果您可以更全面地了解您所做的工作和光标示例,则可以找到其他解决方案。 – JBond