2

以下の tsql を置き換えることができる TSQL の単純な関数はありますか?

SELECT * FROM Users
WHERE (Username IS NULL OR Username != @username)

以下を書くこともできますが、ハードコードされたテキストのため、それは防弾ではありません!

 SELECT * FROM Users
    WHERE ISNULL(Username, 'dummytext') != @username

ありがとう、

4

3 に答える 3

3

この場合、この状態を管理するためにUDFを使用する価値はないと思います。

(Username IS NULL OR Username != @username)長さは43文字です

dbo.IsNullorNotEqual(Username, @Username)=0長さは43文字です


もちろん、関数名を少し短くすることもできますが、関数呼び出しを短くするために慣例を破る価値はありません。

さらに、この場合にUDFを使用しないと、何が起こっているかを正確に確認できます。

于 2012-12-07T09:19:42.883 に答える
2

ダニエルは良い質問をしました...

私の3セント:

  1. 関数を使用すると、インデックスを使用できなくなります:(。
  2. ただし、演​​算子はほとんどのデータベースでサポートされています(この回答!=基づくと、 ANSIに準拠しています。<>
  3. COALESCE()代わりに使用できますISNULL()が、インデックス:(を使用してブロックする機能は引き続き機能します。
于 2012-12-07T09:20:42.133 に答える
2

あなたが達成しようとしていることはよくわかりませんが、これは役に立ちますか?

SQL フィドル

スキーマのセットアップ:

create table Users(Username varchar(99));
insert into Users(Username) values('Alice');
insert into Users(Username) values('Bob');
insert into Users(Username) values(null);

クエリ 1 :

DECLARE @username varchar(99)
SET @username = 'Alice'
SELECT * FROM Users 
EXCEPT
SELECT * FROM Users where Username = @username

結果

| USERNAME |
------------
|   (null) |
|      Bob |
于 2012-12-07T09:23:47.090 に答える