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

Sql server 2008 替换SQL Server中select语句中列的单引号,sql-server-2008,replace,Sql Server 2008,Replace,我有两张桌子。在表1中,我为这样的人设置了一些行: 个人识别码 人名 个人地址 个人识别码 人格年龄 在第二个表中,上面提到的ID、姓名、地址、年龄将列为列。我们这里有personX和PersonY的详细数据 现在,主要问题是在存储过程中,我使用游标将table1值('ID','Name',…)存储在变量@Element中 现在我在同一游标中使用select语句,如下所示: SELECT @Element From Table2 SELECT 'ID' from table2. 我需要输出

我有两张桌子。在
表1
中,我为这样的人设置了一些行:

  • 个人识别码
  • 人名
  • 个人地址
  • 个人识别码
  • 人格年龄
  • 在第二个表中,上面提到的
    ID、姓名、地址、年龄将列为列。我们这里有personX和PersonY的详细数据

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

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

    SELECT @Element From Table2
    
    SELECT 'ID' from table2. 
    
    我需要输出用户的详细信息,如他的id、年龄、地址等,但我得到的输出是
    'id',NAME',age'

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

    SELECT @Element From Table2
    
    SELECT 'ID' from table2. 
    
    但我所需要的只是下面这样

    SELECT ID FROM TABLE2
    
    我使用了替换功能,但它对我不起作用。Case函数,我不能使用它,因为我们不能说在
    表1
    中有哪些人的数据。情况各不相同。我需要一个可以用于所有记录的动态语句。而不是为每个记录执行case

    SELECT REPLACE(@Element,'''','') 
    FROM TABLE2 
    
    (仍将“ID”作为输出,而不是表2中的相应值)


    请帮我做这件事。希望您理解我的解释

    您需要使用动态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。就SQL而言,变量只是存储一个值。它不知道您引用的是列名,这就是为什么它只返回值。

    如果要在
    选择中参数化表名或列名,必须使用动态SQL-将SQL语句创建为
    NVARCHAR(x)
    变量,然后执行您构建的SQL语句。没有别的办法了。谢谢,也许我可以用这个。但我想知道,除了使用动态SQL,还有其他选择吗。因为在前面的解释中,我们修改并替换了所有的动态SQL。解决方案是使用动态SQL。然而,如果你能给我们一个你正在做的事情的大图和一个光标的例子,我们也许能找到一个替代的解决方案。