Properti @tblName
Anda ada di cakupan luar - cakupan baris kode "normal" Anda - tetapi tidak di cakupan dalam SQL yang Anda buat dalam string di sana....
Anda perlu mengubah baris Anda untuk membaca:
SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')'
dan kemudian itu akan berfungsi dengan baik.
Selain itu, Anda tidak menyebutkan versi SQL Server Anda - tetapi mulai SQL Server 2005 atau yang lebih baru, Anda harus berhenti menggunakan sysobjects
dan sysindexes
- sebagai gantinya, gunakan skema sys
baru yang berisi informasi yang kurang lebih sama - tetapi lebih mudah tersedia. Ubah kueri Anda menjadi:
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%'''
Lihat MSDN: Mengkueri Katalog Sistem SQL Server untuk informasi lebih lanjut tentang apa yang tersedia di skema sys
baru dan cara memanfaatkannya semaksimal mungkin!
Seperti yang ditunjukkan oleh "rsbarro": memasukkan pernyataan SQL ini ke dalam tanda kutip adalah hal yang aneh - apakah Anda juga menjalankan pernyataan ini menggunakan EXEC(...)
?? Tapi lalu bagaimana Anda mengembalikan nilai ke properti @tblName
? Benar-benar tidak masuk akal.....
Jika Anda ingin menjalankan kueri ini untuk mendapatkan nilai, Anda harus memiliki sesuatu seperti ini:
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%'
Anda harus memiliki TOP 1
di sana untuk yakin mendapatkan satu nilai saja - jika tidak, pernyataan ini bisa gagal (jika beberapa baris dipilih).
person
marc_s
schedule
23.02.2012