Su propiedad @tblName
existe en el ámbito exterior - el alcance de sus líneas de código "normales" - pero no en el ámbito interno del SQL que está construyendo en la cadena de allí ....
Es necesario para cambiar sus líneas para que diga:
SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')'
y luego debería funcionar bien.
Además, usted no está mencionando su versión de SQL Server - pero a partir de SQL Server 2005 o posterior, debe dejar de usar sysobjects
y sysindexes
- en su lugar, utilice el nuevo esquema sys
que contiene más o menos la misma información - pero más fácilmente disponible. Cambiar la consulta a:
SET @tblName ='SELECT DISTINCT t.name as TableName
FROM sys.tables t
INNER JOIN sys.indexes i on i.object_id = t.object_id
WHERE t.name LIKE ''%empty%'''
Ver MSDN: Querying the SQL Server System Catalog para mucha más información sobre lo que está disponible en el nuevo esquema de sys
y cómo sacar el máximo provecho de ella!
Como "rsbarro" señaló: poner aquí esta declaración SQL entre comillas es impar - ¿está ejecutando esta instrucción usando EXEC(...)
, también? Pero entonces, ¿cómo se asigna el valor a la propiedad @tblName
? Realmente no tiene sentido .....
Si desea ejecutar realmente esta consulta para obtener un valor, se debe tener algo como esto:
SELECT TOP 1 @tblName = t.name
FROM sys.tables t
INNER JOIN sys.indexes i on i.object_id = t.object_id
WHERE t.name LIKE '%empty%'
Es necesario tener un TOP 1
allí ser seguro para obtener un solo valor; de lo contrario, esta instrucción podría fallar (si se seleccionan varias filas).
Espero que haya solo dos columnas en cualquier tabla que se devuelva, y el tipo de datos coincide ... –
@OMGPonies: Quiere decir columnas insertables, por supuesto. –