Единственный вероятный вариант, который у вас есть, это QUOTENAME
, который используется для экранирования имен объектов (и, таким образом, может быть эквивалентен SIMPLE_SQL_NAME
или ENQUOTE_NAME
и, возможно, другим. Таким образом, имена таблиц (при условии, что они не определены владельцем или базы данных) и имена столбцов можно экранировать.
Не существует механизма для полной квалификации объекта (например, превращение таблицы 'bob' в 'database.owner.bob'), поэтому вам придется собрать это вместе вручную, необязательно используя QUOTENAME
для выхода значения, например:
QUOTENAME(@database) + '.' + QUOTENAME(@owner) + '.' + QUOTENAME(@tableName)
Если объект находится в существующей базе данных, вы можете использовать DB_NAME () и предположить, что владелец будет передан как переменная:
DB_NAME() + '.' + QUOTENAME(@owner) + '.' + QUOTENAME(@tablename)
По-настоящему запутанным способом вы можете также вывести владельца:
USER_NAME(OBJECTPROPERTY(OBJECT_ID(@tablename), 'ownerid')))
Да, я понимаю, что все они могут рассматриваться как обходные пути, но это варианты.
Однако для экранирования значений вы действительно одиноки: встроенного эквивалента в SQL Server не существует, так что все ручные операции со строками будут выполняться. Возможно, вам удастся создать UDF, чтобы сделать это, хотя, если вы собираетесь это сделать, возможно, стоит также переписать sproc с использованием семантики SQL Server sp_ExecuteSQL.