質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

1回答

4702閲覧

SQL SERVER 2012 のユーザー定義関数が動作しない

KK_shugyou

総合スコア7

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2016/11/18 08:56

###前提・実現したいこと

サブルーチン用としてユーザー定義関数を使用し
テーブルの金額データを計算し原価としてビューに反映させたい。

###発生している問題・エラーメッセージ

ユーザー定義関数が動作していない?

###該当のソースコード


<SQL SERVER 2012 スカラー関数>

USE [売上]
GO
/****** Object: UserDefinedFunction [dbo].[原価計算] Script Date: 2016/11/18 16:24:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[原価計算]( @金額 int, @製品区分大分類 varchar)
RETURNS int
AS
BEGIN
IF @製品区分大分類 = 'AI'
BEGIN
return @金額 * 1.25
END
IF @製品区分大分類 = 'CU'
BEGIN
return @金額 * 1.15
END
ELSE
BEGIN
RETURN 0
END
RETURN 0
END


<SQL SERVER 2012 ビュー>

SELECT 製品区分大分類,
金額,
dbo.原価計算(金額, 製品区分大分類) AS 原価
FROM dbo.売上DB

###試したこと
上記で設定したスカラー関数での実行はエラーは無く
メッセージでも「コマンドは正常に完了しました。」と表示される。
その後ビューにてSQL文を組み込んでみて実行しても
条件が揃っているにも関わらず正しい計算値にならず全て「0」になってしまう。
どこかSQL文がおかしいのか、はたまたSQL SERVER の設定の問題なのか
分からなく先へ進めない状況です。

何卒ご教授頂きたく、よろしくお願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
SQL SERVER 2012 使用環境

Windows server 2008 R2 Datacente 64bit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suama

2016/11/18 09:23

途中がスルーされて最後のreturn 0 が評価されてるとかではないでしょうか。returnのところを区別しやすいように、0、1と値をかえてみると如何でしょう。
退会済みユーザー

退会済みユーザー

2016/11/18 12:07

マークダウンが
KK_shugyou

2016/11/21 07:51

suama様>ご助言ありがとうございます。確認用として数値を変えてみました、実際の解決方法は下記のhihijiji様の通りで出来ました。
KK_shugyou

2016/11/21 07:53

xa051様>ご助言ありがとうございました。恐れ入りますが「マークダウンが」の後が無いので意図がよく分からないのですが。実際の解決方法は下記のhihijiji様の通りで出来ました。
guest

回答1

0

ベストアンサー

@製品区分大分類 varchar の varchar は varchar(1) と等価です。
varchar(50) のように多めに設定してください。

投稿2016/11/18 09:44

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2016/11/21 02:41

補足します。 ストアドを呼び出すときに引数の2番目に"AI"と指定しても、ストアドでは1文字"A"しか受け取らないため、内部のIF文を素通りして0が帰ってきます。
KK_shugyou

2016/11/21 03:06

 早速のご回答ありがとうございます。変数宣言箇所に文字数を設定し動作確認をしました所、今度は上手く動作しました。とても助かりました、誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問