Преобразовать текст в объект БД и идентификатор поля - PullRequest
1 голос
/ 30 июня 2011

Учитывая оператор выбора, в котором перечислены все мои таблицы и столбцы, как преобразовать имена таблиц и столбцов в идентификаторы, которые можно использовать в отдельном операторе выбора?

Другими словами, если у меня естьstring @Table = 'Person' и @Column = 'Name', я хочу что-то вроде этого:

select 
    DATALENGTH(MAX(t.@Column)) as Longest, 
    DATALENGTH(MIN(t.@Column)) as Shortest 
from @Table as t;

Конечно, это не выполняет то, что я хочу.Я хочу знать длину самой длинной и самой короткой строки, хранящейся в столбце.Если бы я хотел эту информацию для одного столбца, не было бы необходимости использовать эти stringified-переменные.Но я хочу сделать это для каждого (varchar) столбца в моей базе данных.Жизнь слишком коротка, чтобы создать каждый оператор SQL, чтобы выполнить это.Вот почему я хочу параметрический механизм для указания таблицы и столбца.Как мне исправить это, чтобы достичь цели?

Конечно, я могу ошибаться.Возможно, мне следует обратиться к каждому столбцу по индексу и преобразовывать его в имя столбца только при необходимости вывода.Мысли?

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Если вы новичок в tsql и, в частности, в динамическом sql, это хорошая статья о том, что вам следует учитывать.Большинство людей, когда они обнаруживают динамический SQL, думают о всех видах использования и вещах, которые они могут сделать с этим.Но, как я уже сказал ... будьте осторожны.

http://www.sommarskog.se/dynamic_sql.html

1 голос
/ 30 июня 2011
DECLARE @sql VARCHAR(999)
DECLARE @col VARCHAR(50)
DECLARE @table VARCHAR(50)

SET @col = <colname>
SET @table = <tablename>

SET @SQL = '
select 
DATALENGTH(MAX(t.@Column)) as Longest, 
DATALENGTH(MIN(t.@Column)) as Shortest 
from @Table as t'

SET @SQL = REPLACE(REPLACE(@SQL, '@Column', @col), '@Table', @table)

EXEC(@SQL)
...