Stack Exchangeデータエクスプローラーで関数を作成/呼び出ししようとしています。関数がSQL Serverで呼び出されない理由
私が今作成したこの機能をなぜ呼び出さないのですか?
-- Get Post with Best Comment on Site
-- Gets the Post with the Best Comment on the Site and Associated Data
CREATE FUNCTION typeOfPost
(@PostId int(11))
RETURNS varchar(30)
AS
BEGIN
declare @PostTypeId int(3)
select @PostTypeId = (SELECT PostTypeId FROM posts WHERE PostId = @PostId)
return (SELECT Name FROM PostTypes WHERE Id = @PostTypeId)
end
SELECT PostId, typeOfPost(PostId) AS [Post Type]
FROM comments
WHERE Score = (
SELECT max(Score)
FROM comments
);
それは与える:
"SELECT" "typeOfPostを" 関数名に組み込まれて認識されていません。
SQL Serverの関数呼び出しの例を見て、前面に「.dbo」がたくさんあることがわかりました。私がこれを置くと、私はこれを得る:
キーワード 'SELECT'の近くに構文が正しくない。
誰も私の機能に何か問題があると説明できますか?
あなたの関数を呼び出すには、 'dbo.typeOfPost(PostId)'を使ってみてください。何らかの理由で、関数呼び出しにスキーマ名が必要です。なぜ私は現時点で覚えていないのですか? [スキーマ名なしでユーザー定義関数を呼び出すことは可能ですか?](http://stackoverflow.com/questions/502949/is-it-possible-to-call-a-user-defined-function-without-スキーマ名) – Beno
@Beno - afaikは、システム関数とユーザー定義関数を区別します。そして、お尻の王様の痛みになる:) – MatBailie
INTとINT(3)をINTに変えてみてください。 SQL ServerではINTデータ型のサイズを指定できません – Sparky