2011-09-01 22 views
19

Bir veritabanını Oracle'dan geçirdim ve şimdi birkaç Skaler Değerli İşlev var.SQL'de Skaler Değerli İşlevleri Çağırma

sütun "dbo" veya kullanıcı tanımlı fonksiyon veya agrega "dbo.chk_mgr", veya adı ya bulamıyor belirsiz:

Ancak, ben onları çağırdığınızda, Şu hatayı olsun.

Ben bunu böyle diyorum: Ben yanlış ne yapıyorum

SELECT dbo.chk_mgr('asdf') 

?

+1

Bize söz konusu işlevin CREATE deyimini gösterebilir misiniz? –

+2

Ayrıca, onu çağırdığınızı söylediğinizde, nasıl/nereden arıyorsunuz? Belki de farkında olmadan yanlış DB'ye işaret ediyorsun? –

+0

Sadece bu sorunu yaşadım. @ TomH'un yorumu doğru cevaptı. En çok oylanan cevap benim için kırmızı bir ringa balığıydı (çünkü soruda olduğu gibi) Aslında Skaler değerli bir işlev kullanıyordum. –

cevap

17

Table-Valued Function olmadığından emin misiniz?

nedeni soruyorum:

CREATE FUNCTION dbo.chk_mgr(@mgr VARCHAR(50)) 
RETURNS @mgr_table TABLE (mgr_name VARCHAR(50)) 
AS 
BEGIN 
    INSERT @mgr_table (mgr_name) VALUES ('pointy haired boss') 
    RETURN 
END 
GO 

SELECT dbo.chk_mgr('asdf') 
GO 

Sonuç: Ancak

Msg 4121, Level 16, State 1, Line 1 
Cannot find either column "dbo" or the user-defined function 
or aggregate "dbo.chk_mgr", or the name is ambiguous. 

...

SELECT * FROM dbo.chk_mgr('asdf') 

mgr_name 
------------------ 
pointy haired boss 
6

sözdizimi benim için çalışıyor That:

CREATE FUNCTION dbo.test_func 
(@in varchar(20)) 
RETURNS INT 
AS 
BEGIN 
    RETURN 1 
END 
GO 

SELECT dbo.test_func('blah') 

Eğer işlev bir fonksiyonu olarak ve altında dbo şema var olduğundan emin misiniz?

+1

evet, İşlevler ... altındaki Skaler Değerli İşlevler klasörünün altındadır. –

12
PRINT dbo.[FunctionName] ([Parameter/Argument]) 

Örn .:

PRINT dbo.StringSplit('77,54') 
-1

seçilen doğru veritabanına sahip olduğundan emin olun. Yeni bir sorgu penceresinde çalıştırmaya çalışıyorsanız, ana veritabanını seçmiş olabilirsiniz.

İlgili konular