TSQL sp_executesql

时间:2015-03-23 21:02:22

标签: sql-server tsql sp-executesql

我有一张简单的表格:

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]

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

2 个答案:

答案 0 :(得分: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是EXEC ed查询字符串中的OUTPUT变量。然后它将@result绑定到@ 1,因此您可以检索它。我从未发现OUTPUT参数非常直观易用。

答案 1 :(得分: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

结果是expectet 1

感谢您的帮助