2017-07-17 5 views
-1

ストアドプロシージャでPARSENAME関数を使用すると、ときどき正しい値が返され、時にはNULLという値が返されます。私はここで少し混乱しているのでしょうか?PARSENAME関数の動作がwierd

SELECT parsename(Replace('the big bang Theory',' ','.'),4) 
+1

を。データに2つのスペースがあるかどうかをソースデータで確認してください。 –

+0

この方法を正しく使用しているかどうかわからない場合は、例を参照してください。https://docs.microsoft.com/en-us/sql/t-sql/functions/parsename-transact-sql – Tanner

答えて

0

すべてPARSENAME()の最初には、タイプSYSNAMEobject_nameを解析することを意図していました。

可能なシナリオ:

SELECT c, PARSENAME(REPLACE(sub.c, ' ', '.'), 4) AS part 
FROM (
    SELECT 'a b c d e'     -- more than 4 parts 
    UNION ALL 
    SELECT 'a b c d' 
    UNION ALL 
    SELECT REPLICATE('a', 129) + ' b c d' -- too long part 
    UNION ALL 
    SELECT REPLICATE('a', 128) + ' b c d' 
    UNION ALL 
    SELECT 'a b c d'     -- more than one space 
    UNION ALL 
    SELECT CAST('a b c d' AS CHAR(30)) -- padded with spaces 
)sub(c) 

Rextester Demo

a.b.c.d.eが有効object_nameのではないことに注意してください。またSYSNAMENVARCHAR(128)のエイリアスで、長い部分は無効です。

これは、別のジョブ(ユーザーストリングを解析する)を使用すると、エラーが発生する可能性があります。

1

PARSENAME(Transact-SQL)オブジェクト名の指定された部分を返します。 取得できるオブジェクトの部分は、オブジェクト名、 所有者名、データベース名、およびサーバー名です。

PARSENAME( 'object_name'、object_piece)引数 'object_name' 指定されたオブジェクトを取得するオブジェクトの名前です。 部分です。 object_nameはsysnameです。このパラメーターは、オプションで修飾されたオブジェクト名 です。サーバー名、

データベース名、所有者名、およびオブジェクト名:オブジェクト名のすべての部分が 修飾された場合は、この名前は、次の4つの部分を持つことができます。

object_pieceオブジェクト部分が返されますか? object_pieceはタイプ int型のものであり、これらの値を持つことができます:1 =オブジェクト名2 =スキーマ名3 = データベース名4 =サーバー名。これは、すべての実行時に「」正常に返さ

SELECT PARSENAME('[Server].database.schema.table', 1) AS 'Object Name'; 
SELECT PARSENAME('[Server].database.schema.table', 2) AS 'Schema Name'; 
SELECT PARSENAME('[Server].database.schema.table', 3) AS 'Database Name'; 
SELECT PARSENAME('[Server].database.schema.table', 4) AS 'Server Name'; 

SELECT PARSENAME('database..table', 1) AS 'Object Name'; 
SELECT PARSENAME('database..table', 2) AS 'Schema Name'; -- will return NULL 
SELECT PARSENAME('database..table', 3) AS 'Database Name'; 
SELECT PARSENAME('database..table', 4) AS 'Server Name'; -- will return NULL 
関連する問題