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。然而,如果你能给我们一个你正在做的事情的大图和一个光标的例子,我们也许能找到一个替代的解决方案。