Как определить таблицу динамически в хранимой процедуре - PullRequest
0 голосов
/ 02 августа 2011

Спасибо за отзыв, но я надеялся на помощь с командой UPDATE, а не с SELECT.Может кто-нибудь помочь с синтаксисом для команды UPDATE?

Я передаю имя таблицы в хранимую процедуру, но SQL, кажется, не распознает его.

DECLARE @userTable AS VARCHAR(200);
SET @userTable = @currTable


UPDATE @userTable
SET     [lang_String] = @lang_String, [date_Changed] = @submitDate1
WHERE   (ID = @ID)

@currTableперешел в хранимую процедуру.Все имена таблиц построены по дизайну в коде.

Ответы [ 2 ]

5 голосов
/ 02 августа 2011

Вы не можете, вам нужно собрать всю строку SQL и затем выполнить ее, например, так:

DECLARE @sql nvarchar(4000)

SELECT @sql = ' SELECT col1, col2, col3 ' +
              ' FROM dbo.' + quotename(@tblname) +
              ' WHERE keycol = @key'

EXEC sp_executesql @sql, N'@key varchar(10)', @key
0 голосов
/ 04 декабря 2012

Сработало довольно легко ....

  @myTable varchar(150)

/* Comments:
*/ 

AS  
SET NOCOUNT ON;   

DECLARE @sql varchar(max);   

SET @sql = 'SELECT [ID], [StringID], [GUID] FROM ' + @myTable + ' ORDER BY [GUID]';

print (@sql) 

EXECUTE(@sql);

SET @langTable = Null;

К вашему сведению, значения, доступные для myTable, хранятся в другой таблице и недоступны для редактирования пользователями. Имена таблиц встраиваются в код динамически на основе уникальной комбинации значений.

...