「CONCAT」は認識される組み込み関数名ではありません


24

クライアントからSQL Server 2012で実行されていることが報告されましたが、最終的な配信の前にテスト用のテストクエリをいくつか配信しました。

「CONCAT」は、認識される組み込み関数名ではありません。

CONCAT()これは、SQL Server 2012で導入された新しい組み込み関数であり、すべて問題なく機能していることを理解していますが、「クエリを実行するユーザーは、 Transact-SQLを実行する権限があります。」したがって、クライアントには、PRODとは異なるバージョンのSQL ServerがDEVにインストールされている可能性が高いことを証明しています。

SELECT/EXECUTE組み込みスカラー値関数のアクセス許可を明確に拒否することに関する情報を見つけることができませんが、それは可能ですが、もしそうなら、ユーザーは同じエラーテキストを受け取りますか?


concatが機能しない場合は、これを試してくださいSELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
Nilachal Sethi

CONCATは10進数型concat(ID + '_' + OtherID)をサポートしています。IDはint型にすることができます。

古いバージョンでは、代わりにこれを使用する:DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
ジャック・ウィテカー

回答:


21

CONCATSQL Server 2012で導入されました。SQL Server 2008 R2で機能させる方法はありません。ドキュメントから:

ここに画像の説明を入力してください

また、互換性レベルであっても、2012年以降に失敗させる方法はありません。だからあなたの人々SELECT @@VERSION;は両方のサーバーをチェックしてください。CONCAT失敗する箇所は<11 であることがわかります。以前のバージョンと互換性のあるコードを作成するには、標準の文字列連結演算子(+)を使用する必要があります。私は、あなたがスカラー関数でこれを行うだろうか分からないあなたは常に使用しない限り、正確な入力文字列の数が同じあなたが使用するようにコードを変更するdbo.CONCAT()代わりにをCONCAT()(それが重要なシナリオがあるだろう、プラスあなたの関数は何もしない場合ネイティブではできません。アップグレードする場合は、一貫した動作が必要です。したがって、そのアプローチはお勧めしません。追加する必要がある場合もありますNULL 処理およびその他の小さな変更(表示されない場合、既存のスクリプトを正確に変更する方法を説明することは不可能です)。


ありがとう、アーロン。CONCAT()は、SP_ExecuteSQL動的SQL呼び出しの前にいくつかの文字列を結合するために使用されるだけなので、コードは簡単に変更できます。私は実際にはSQL Serverの2012年にCONCAT()を使用してアクセスを拒否するためにNOの道があったことを確認したかった
beeks

1
@beeksユーザーの使用を拒否する方法は知りませんCONCAT()、いいえ。ただし、コードを2008 R2で動作させるために必要なことと、それがどのような関係を持っているかについては、あまり従いません。追加するの CONCAT()ではなく、削除する必要があります。
アーロンバートランド

1
はい、コードを2008 R2と互換性のあるものにする方法を理解しています。これは簡単なことです。DENYこの機能にアクセスできないことを確認していただきありがとうございます。
ビークス

連結を+に変更するときは、連結する値が最初に文字列であることを確認する必要があります。数値フィールドがある場合は、それらを追加しようとします(文字列がintではないため失敗します)数値フィールド(タイプ)を使用すると、最初の文字列にキャスト/変換必ずそこMAKEある
マリーBOVを

3

次のようにODBC CONCAT関数を使用できます。

SELECT {fn CONCAT('foo ', 'test') }

これに関する問題は、この関数が一度に2つのパラメーターしか許可しないことです。したがって、次のように3つ以上を使用する場合を除きます。

SELECT {fn CONCAT('foo ', {fn CONCAT('test ', 'buddy')}) }

「+」演算子を使用することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.