1

我有一个简单的表:

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]

有两列einsund 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. 我需要这个值进行进一步处理。

4

2 回答 2

1

尝试这样的事情

DECLARE @result int
exec sp_executesql
    N'Select @1=eins from test where zwei = @2',
    N'@1   nvarchar(100) OUTPUT,@2 nvarchar(100)',
    @1=@result OUTPUT,@2=N'2'
SELECT @result

这样做是说 @1 是EXECed 查询字符串中的 OUTPUT 变量。然后它将@result 绑定到@1,以便您可以检索它。我从来没有发现 OUTPUT 参数使用起来非常直观。

于 2015-03-23T21:44:58.397 回答
0

上一篇文章中 DWright 的代码有正确的结果,但主要问题没有解决。编写代码时我不知道列的名称。以下代码似乎是正确的:

 Declare @result int
Declare @sql nvarchar(500)
Declare @columnname nvarchar(50)

set  @columnname = 'eins'
set @sql= N'Select @1= ' + @columnname +' from test1 where zwei = @2'

exec sp_executesql
    @sql,
    N'@1   nvarchar(100) OUTPUT,@2 nvarchar(100)',
    @1=@result OUTPUT,@2=N'2'
SELECT @result

结果是期望1

感谢您的帮助

于 2015-03-24T16:47:26.293 回答