Bagaimana cara memeriksa parameter bernilai tabel nol atau kosong?

9

Saya memiliki prosedur tersimpan (SS2k8) dengan beberapa parameter tabel-nilai yang kadang-kadang akan menjadi nol atau kosong. Saya telah melihat posting StackOverflow ini yang mengatakan bahwa TVPs null / kosong harus dihilangkan dari daftar parameter pemanggilan. Masalah saya adalah bahwa saya tidak dapat menemukan cara memeriksa apakah ada yang kosong atau nol di dalam prosedur tersimpan sebagai "JIKA (@tvp IS NULL)" gagal pada pembuatan prosedur dengan pesan 'Harus mendeklarasikan variabel skalar "@tvp"'. Apakah saya harus melakukan SELECT COUNT (*) pada TVP dan memeriksa nol?

Kutipan kode:

CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS

IF (@tvp IS NOT NULL) -- doesn't work
BEGIN
  -- lots of expensive processing
END
ELSE
BEGIN
  -- a little bit of cheap processing
END
...
Dan
sumber

Jawaban:

14

Meja tidak bisa NULL, TVP juga tidak. Bagaimana Anda memeriksa apakah meja kosong? Anda tentu tidak mengatakannya IF Sales.SalesOrderHeader IS NULL. :-)

IF EXISTS (SELECT 1 FROM @tvp)
BEGIN
  -- lots of expensive processing
END
ELSE
BEGIN
  -- a little bit of cheap processing
END
...
Aaron Bertrand
sumber
3

Parameter tabel bernilai tidak akan menjadi nol. Perlakukan itu lebih seperti sebuah meja dan @ aaraon Bertrand memukuliku sampai habis. Jadi ya, periksa apakah ada baris.

billinkc
sumber