none
Обращение к данным таблицы, название которой хранится в переменной RRS feed

  • Вопрос

  • Вот хочу создать хранимую процедуру, которой через параметр можно было б передать название таблицы базы данных и сделать какието действия (именно с данными этой таблицы), например просто вывести данные.

    Например вот:

    CREATE PROCEDURE GetDataWithSetTable (@TableName NCHAR(50))
    AS
    BEGIN
        SELECT * FROM @TableName;
    END
    
    Каким образом это можно сделать?

    11 ноября 2010 г. 19:25

Ответы

  • use tempdb
    go
    
    create table t1(id int identity(1,1), value varchar(50))
    go
    
    insert into t1(value) values('1'),('2'),('3'),('4'),('5')
    go
    
    create proc get_data_by_table_name
    	@table_name sysname
    as
    begin
    	declare @stmt varchar(max)
    	set @stmt = 'select * from ' + @table_name
    	exec(@stmt)
    end
    go
    
    -----------------------------------
    exec get_data_by_table_name 't1'
    go
    

    Gruß Yury
    • Помечено в качестве ответа JAGUAR_NET 11 ноября 2010 г. 20:31
    11 ноября 2010 г. 20:27

Все ответы

  • use tempdb
    go
    
    create table t1(id int identity(1,1), value varchar(50))
    go
    
    insert into t1(value) values('1'),('2'),('3'),('4'),('5')
    go
    
    create proc get_data_by_table_name
    	@table_name sysname
    as
    begin
    	declare @stmt varchar(max)
    	set @stmt = 'select * from ' + @table_name
    	exec(@stmt)
    end
    go
    
    -----------------------------------
    exec get_data_by_table_name 't1'
    go
    

    Gruß Yury
    • Помечено в качестве ответа JAGUAR_NET 11 ноября 2010 г. 20:31
    11 ноября 2010 г. 20:27
  • use tempdb
    go
    
    create table t1(id int identity(1,1), value varchar(50))
    go
    
    insert into t1(value) values('1'),('2'),('3'),('4'),('5')
    go
    
    create proc get_data_by_table_name
    	@table_name sysname
    as
    begin
    	declare @stmt varchar(max)
    	set @stmt = 'select * from ' + @table_name
    	exec(@stmt)
    end
    go
    
    -----------------------------------
    exec get_data_by_table_name 't1'
    go
    

    Gruß Yury
    Спасибо огромное! То что нужно.
    11 ноября 2010 г. 20:31
  • Спасибо огромное! То что нужно.

    Только осторожнее с динамикой, научитесь её правельно "готовить", а то:

    exec get_data_by_table_name @table_name = 't1 drop table t1'
    select * from t1
    

     


    http://www.t-sql.ru
    12 ноября 2010 г. 6:28
    Отвечающий