2012-06-19 17 views
7

dinamik TSQL sorgu ... Basit Bu benim çok uzun süre şaşkınlıkla bakıyorum ettik kolay bir cevap ama olabilir sözdizimi

Ben bir değişken adı ve sayısı gibi bir saklı yordam giriş parametre alır aşağıdaki sorgu bu tablodaki kayıtlar. Dinamik ifadenin (@toStartStr) sonuçlarını bir değişkene (@toStart) almak istiyorum.

-- @tempTableName = SProc input parameter 
DECLARE @toStartStr nvarchar(150); 
DECLARE @toStart int; 
SET @toStartStr = 'SELECT @toStart = COUNT(ID) FROM ' + @tempTableName; 
EXEC(@toStartStr); 

Şu anda, bir hata @toStart dize SELECT ile birleştirilmiş edilemez olduğunu göstermektedir, ancak bu ne istiyorum özü buydu. Neyi yanlış yaptığımı gören var mı? Ya da bir alternatif önermek? FYI SQL 2008 R2. Teşekkürler. zaman versiyonunu belirtiniz - Eğer uçak içi işlemleri (ve SQL Server 2005 veya daha iyi kullandığınız akımını görmezden sorun değil mi eğer

cevap

11
DECLARE @sql NVARCHAR(255); 

DECLARE @toStart INT; 

SET @sql = N'SELECT @toStart = COUNT(ID) FROM ' + QUOTENAME(@tempTableName); 

EXEC sp_executesql @sql, N'@toStart INT OUTPUT', @toStart OUTPUT; 

PRINT @toStart; 

Ancak, bunu yapmak için çok daha kolay ve daha verimli bir yolu yoktur soru sormak!).

DECLARE @toStart INT; 

SELECT @toStart = [rows] 
    FROM sysindexes 
    WHERE id = OBJECT_ID(@tempTableName) 
    AND indid IN (0,1); 

PRINT @toStart; 

dedi ki, eğer siz: Sadece şeyiyle

DECLARE @toStart INT; 

SELECT @toStart = SUM(rows) 
    FROM sys.partitions 
    WHERE [object_id] = OBJECT_ID(@tempTableName) 
    AND index_id IN (0,1); 

PRINT @toStart; 

, burada (sadece bağlayıp halkın üyesi) Ayrıca herhangi bir özel ayrıcalık gerektirmez SQL Server 2000 için bir çözümdür Bir sonraki ID'nin ne olabileceğini belirlemek için bir sayı kullanıyorsunuz ya da bunun gibi bir şey, sanırım satırlar silinebiliyor ve geri dönüşler nedeniyle bir kimlik sütunu değerleri atlanabiliyor.

+0

Her zaman bir ** sa ** kullanıcısı olduğunuz doğru değildir. Bu soruyu yürütmek için yönetici haklarının gerekli olduğunu düşünüyorum. Sağ? – Pankaj

+0

Hayır, sadece yönetici haklarına sahip olmadığım bir sistem üzerinde test ettim ve iyi çalışıyor. – JNK

+0

@Kanavi Hayır, sys.partitions görmek için yönetici hakları gerekli değildir. Kodu kaldırmamı söylemeden önce denedin mi? –

İlgili konular