【发布时间】:2015-03-23 21:02:21
【问题描述】:
我有一张简单的桌子:
CREATE TABLE [dbo].[test]
(
[eins] [varchar](50) NOT NULL,
[zwei] [varchar](50) NULL,
CONSTRAINT [PK_test]
PRIMARY KEY CLUSTERED ([eins] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
有两列 eins 和 zwei,都是 varchar(50)
价值观
insert into test(eins, zwei) values(1,2)
1 和 2 在相应的列中。
查询
select eins from test
给出1的正确结果
以下代码还在结果窗口中给出了1 的正确结果:
declare
@in varchar(50),
@sql nvarchar(500)
set @in = 'eins'
set @sql = 'select ' + @in + ' from test'
Exec(@sql)
但是,它不使用输出参数,我需要将结果进行进一步处理。
所以,我试试:
exec sp_executesql N' Select @1 from test where zwei = @2',N'@1 nvarchar(100),@2 nvarchar(100)',@1=N'eins',@2=N'2'
预期结果为1。但是:结果是eins,即列名,而不是值。
如何查询 Select @Variable from @Variable2 where @variabel3 = @Variable4 之类的内容?
表和列可以是非可变的,如果需要,最重要的是Select @Variable。我需要这个值进行进一步处理。
【问题讨论】:
-
我翻译成英文,所以我们可以保留它,假设@OliverNeis 可以接受翻译。
-
sp_executesql 与参数将,正如您所发现的,正是 not 在这里执行您想要的操作:“列名”没有 sql 参数数据类型。因此,构建类似于您第一次尝试的动态 sql 可能是唯一现实的方法。
标签: sql-server tsql sp-executesql