Solución:
PRINT
es solo RAISERROR
con una gravedad de 0. Entonces puedes usar.
declare @name varchar(10)
set @name="George"
RAISERROR ('Hello %s.', 0, 1, 'George') WITH NOWAIT
Edite para almacenarlo en una variable, puede usar el xp_sprintf
procedimiento almacenado extendido.
declare @name varchar(10)
set @name="George"
DECLARE @ret varchar(500)
exec master..xp_sprintf @ret OUTPUT, 'Hello %s.', @name
PRINT @ret
Si tiene un número limitado de cadenas de formato y puede agregarlas a sysmessages (a través de sp_addmessage), puede usar FORMATMESSAGE:
Al igual que la instrucción RAISERROR, FORMATMESSAGE edita el mensaje sustituyendo los valores de parámetro proporcionados por las variables de marcador de posición en el mensaje. Para obtener más información sobre los marcadores de posición permitidos en los mensajes de error y el proceso de edición, consulte RAISERROR.
La siguiente sería una respuesta válida para SQL Server 2005 o posterior, pero desafortunadamente, el OP está buscando una solución para SQL Server 2000:
Es feo y un abuso de Try / Catch y RAISERROR
:
declare @message varchar(50)
begin try
RAISERROR('Hello %s',16,1,'george')
end try
begin catch
set @message = ERROR_MESSAGE()
end catch
print @message