La tua struttura @tblName
esiste l'ambito esterno - l'ambito delle linee di codice "normale" - ma non a portata interna del SQL si sta costruendo nella stringa di lì ....
È necessario per modificare le righe da leggere:
SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')'
e quindi dovrebbe funzionare bene.
Inoltre, non stai citano la versione di SQL Server - ma a partire da SQL Server 2005 o più recente, si dovrebbe smettere di usare sysobjects
e sysindexes
- invece, utilizzare il nuovo sys
schema che contiene più o meno le stesse informazioni - ma più facilmente disponibile. Modificare la tua ricerca per:
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%'''
Vedere MSDN: Querying the SQL Server System Catalog per molte più informazioni su ciò che è disponibile nella nuova sys
schema e come fare la maggior parte di essa!
Come "rsbarro" ha sottolineato: mettere questa dichiarazione SQL qui tra virgolette è strano - stai eseguendo questa affermazione usando EXEC(...)
, anche ?? Ma come si assegna il valore alla proprietà @tblName
? Non ha molto senso .....
Se si desidera eseguire in realtà questa query per ottenere un valore, si dovrebbe avere qualcosa di simile:
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%'
È necessario disporre di un TOP 1
in là essere sicuro per ottenere solo un singolo valore - altrimenti questa dichiarazione potrebbe fallire (se sono selezionate più righe).
fonte
2012-02-23 05:48:56
Spero ci siano solo due colonne in qualunque tabella venga restituita, e il tipo di dati corrisponde ... –
@OMGPonies: intendi colonne inseribili, ovviamente. –