我有一张简单的表格:
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
。我需要这个值进行进一步处理。
答案 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
感谢您的帮助