При реальной необходимости в параллелизме в Ruby для Производственной системы уровня (где Вы не можете использовать бету), процессы являются, вероятно, лучшей альтернативой.
, Но, совершенно определенно стоит попробовать потоки под JRuby сначала.
Также, если Вы интересуетесь будущим поточной обработки под Ruby, Вы могли бы найти этот статья полезный.
Правильно ли я понимаю, что вам нужен идентификатор базы данных для AnotherDB?
SELECT *
FROM master..sysdatabases
WHERE name = 'AnotherDB'
В противном случае вы можете ИСПОЛЬЗОВАТЬ другие базы данных в динамическом SQL, если это помогает:
DECLARE @SQL NVARCHAR(MAX)
, @objId INT
SET @SQL = N'
USE AnotherDB
SELECT @id = OBJECT_ID(''customer'')
'
EXEC SP_EXECUTESQL @SQL
, N'@id INT OUTPUT'
, @id = @objId OUTPUT
SELECT @objId
ИЛИ Выполнить SP в других базах данных с:
EXEC AnotherDB.dbo.ProcedureName
@paramX = ...
, @paramY = ...
У вас должно получиться следующее:
SELECT
name
FROM
AnotherDB.sys.objects --changes context
WHERE
object_id = OBJECT_ID('AnotherDB.ASchema.ATable')
Это то, что вы фактически делаете с OBJECT_ID ('AnotherDB.ASchema.ATable')
Это означает, что вы можете положиться на на dbname.sys.objects и избегайте путаницы с функциями метаданных.
Примечание: новые представления каталога предназначены для использования и не меняются от версии к версии, согласно ссылке. Раньше использование системных таблиц считалось плохой практикой, но клеймо все еще остается. Таким образом, вы можете спокойно полагаться на sys.objects, а не на функции метаданных.
Взгляните на функцию PARSENAME в TSQL - она позволит вам извлечь любую из четырех частей полностью (или неполного) квалифицированного имени. . Для базы данных в вашем примере:
select parsename('AnotherDB.ASchema.ATable',3)
возвращает:
AnotherDB
select parsename('AnotherDB.ASchema.ATable',2)
возвращает:
ASchema
Если не полностью определено, вы получите нулевые результаты, если запросите часть имени, которая не входит в строку:
select parsename('ASchema.ATable',3)
возвращает:
NULL