2013-11-29 5 views
0

Я хочу передать имя таблицы в качестве параметра, и я хочу, чтобы этот параметр в котором пунктпередача имя таблицы в качестве параметра в SQL-сервере

CREATE PROC [dbo].[bb_GetPrepositionInfo] 
    @userid INT,@propId INT,@tabName varchar(50) 
AS 
     SET NOCOUNT ON 
     SET XACT_ABORT ON 

    BEGIN TRAN 

    SELECT * 
    FROM @tblname 
    WHERE ([acq_id] = @propId AND [user_id] = @userid) 

    COMMIT 
    GO 
+0

Dynamic SQL пожалуйста. –

+0

Возможный дубликат [Dynamic SQL (имя передающей таблицы как параметр)] (http://stackoverflow.com/questions/1325044/dynamic-sql-passing-table-name-as-parameter) – GSerg

+0

Возможный дубликат [Название столбца и/или имя таблицы как параметры] (http://stackoverflow.com/q/5791764/11683) – GSerg

ответ

3

Не тестировался, но Вы должны использовать Dynamic SQL.

CREATE PROC [dbo].[bb_GetPrepositionInfo] 
    @userid INT,@propId INT,@tabName varchar(50) 
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON 

    BEGIN TRAN 

    DECLARE @SQL varchar(250) 
    SELECT @SQL = 'SELECT * FROM ' + QuoteName(@tabName) + ' where acq_id=' + Quotename(@propId) + ' AND user_id=' + Quotename(@userid) 
    EXEC (@SQL) 

    COMMIT 
GO 
+0

Mr_eclair ... ошибка Msg 207, уровень 16, состояние 1, процедура bb_GetPrepositionInfo, строка 10 Недопустимое имя столбца 'propId ». –

+0

@KrantiSingh Попробуйте сейчас, отредактировав код. –

+0

exec bb_GetPrepositionInfoByTable 523,35, 'bb_acquire_prvider' .... получение этой ошибки ..... Msg 207, уровень 16, состояние 1, строка 1 Неверное имя столбца '35'. Msg 207, уровень 16, состояние 1, строка 1 Неверное имя столбца '523'. –

2
CREATE PROC [dbo].[bb_GetPrepositionInfo] 
    DECLARE @userid INT 
    DECLARE @propId INT 
    DECLARE @tabName varchar(50) 
    DECLARE @sqlCommand varchar(200) 
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON 

    BEGIN TRAN 

    SET @sqlCommand = 'SELECT * from ' + @tabName +'WHERE [acq_id]='+ @propId +'AND [user_id] = '+ @userid 
    EXEC (@sqlCommand) 

    COMMIT 
GO 
+1

В качестве параметра вам не нужно «@sqlCommand varchar (200)», если вы собираетесь его каждый раз переустанавливать. Вместо этого рассмотрите это как переменную внутри тела процедуры. – Mack

+0

У меня много ошибок .. ?? –

Смежные вопросы