替换SQL Server中select语句中列的单引号

时间:2013-06-21 08:50:46

标签: sql-server-2008 replace

我有2张桌子。在table1我有这样的行:

  1. PersonX - ID
  2. PersonX - 名称
  3. PersonX - 地址
  4. PersonY - ID
  5. PersonY - AGE
  6. 在第二个表格中,上面提到的ID, NAME,ADDRESS,AGE将是列。我们在这里有详细的personX和PersonY数据。

    现在,主要问题在于存储过程,使用游标,我将table1值('ID', 'Name', ...)存储在变量@Element中。

    现在我在同一个游标中使用select语句如下:

    SELECT @Element From Table2
    

    我需要输出用户详细信息,例如他的ID,年龄,地址等。但我得到输出为'ID', 'NAME', 'AGE'等....

    我发现这是因为@Elementvarchar并且有字符串值,所以select语句执行如下:

    SELECT 'ID' from table2. 
    

    但我需要的只是下面的

    SELECT ID FROM TABLE2
    

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

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

    (仍然将'ID'作为输出,而不是表2中的相应值)

    请帮帮我。希望你理解我的解释

1 个答案:

答案 0 :(得分: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 '+@ColName+','+''''+@ColName+''' FROM TABLE1'

EXEC (@SQL)

在返回的第一列中,是您希望能够执行的SQL,但是在我的查询的第二列中,您正在执行的操作。就SQL而言,您的变量只是存储一个值。它不知道你指的是一个列名,这就是为什么它只返回值。