SQL Server 2000'de exec kullanarak bir tablo değişkenine insert yapamayacağınız doğru mu?
Bu kodu denedim ve EXECUTE bir tablo değişkenine ekleme yapılırken kaynak olarak kullanılamaz
hata mesajını aldım.
declare @tmp TABLE (code varchar(50), mount money)
DECLARE @q nvarchar(4000)
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail'
INSERT INTO @tmp (code, mount)
EXEC sp_executesql (@q)
SELECT * from @tmp
Eğer bu doğruysa, ne yapmalıyım?
N.B. - bu soru ve cevap SQL Server'ın 2000 sürümü ile ilgilidir. Daha sonraki sürümlerde, INSERT INTO @table_variable ... EXEC ...
üzerindeki kısıtlama kaldırılmıştır ve bu nedenle daha sonraki sürümler için geçerli değildir.
Geçici bir tabloya geçmeniz gerekecek:
CREATE TABLE #tmp (code varchar(50), mount money)
DECLARE @q nvarchar(4000)
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail'
INSERT INTO #tmp (code, mount)
EXEC sp_executesql (@q)
SELECT * from #tmp
Belgeler]'den (http://msdn.microsoft.com/en-us/library/aa260638(v=sql.80).aspx):
Bir tablo değişkeni yerel bir değişken gibi davranır. Bildirildiği işlev, saklı yordam veya toplu iş olan iyi tanımlanmış bir kapsama sahiptir.
Kapsamı dahilinde, bir tablo değişkeni normal bir tablo gibi kullanılabilir. SELECT, INSERT, UPDATE ve DELETE deyimlerinde bir tablo veya tablo ifadesinin kullanıldığı her yere uygulanabilir. Ancak, table aşağıdaki deyimlerde kullanılamaz:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.
Belgeler yanıltıcıdır.
Üretimde çalışan aşağıdaki koda sahibim
DECLARE @table TABLE (UserID varchar(100))
DECLARE @sql varchar(1000)
SET @sql = 'spSelUserIDList'
/* Will also work
SET @sql = 'SELECT UserID FROM UserTable'
*/
INSERT INTO @table
EXEC(@sql)
SELECT * FROM @table
DECLARE @q nvarchar(4000)
SET @q = 'DECLARE @tmp TABLE (code VARCHAR(50), mount MONEY)
INSERT INTO @tmp
(
code,
mount
)
SELECT coa_code,
amount
FROM T_Ledger_detail
SELECT *
FROM @tmp'
EXEC sp_executesql @q
Dinamik sorguda istiyorsanız