如何动态地将Ordinal_Position值传递给查询?

时间:2017-09-10 13:44:07

标签: sql sql-server

我正在尝试运行以下查询,以根据其ORDINAL_POSITION动态获取列名。

declare @data_col nvarchar(max),
@id int
set @id=1
print @id
set @data_col='select column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=''Source_table'' and ORDINAL_POSITION='+@id+''

exec sp_executeSQL @data_col

这似乎不起作用。有没有替代方法??

2 个答案:

答案 0 :(得分:1)

您正在使用sp_executesql。使用参数!

declare @data_col nvarchar(max), @id int;
set @id = 1;
print @id;
set @data_col = '
select column_name
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = ''Source_table'' and
      ORDINAL_POSITION = @id
';

exec sp_executeSQL @data_col, N'@id integer', @id = @id;

我想我也会将表格作为参数传递,但硬编码没有任何害处。

答案 1 :(得分:0)

请改用

DECLARE @data_col NVARCHAR(MAX) ,
    @id INT
SET @id = 1
PRINT @id

SET @data_col = 'select column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=''Source_table'' and ORDINAL_POSITION=@id'

EXEC sp_executesql @data_col,
    N'@id int', @id;