Как позволить SQL Server не возвращать нулевой запрос? - PullRequest
0 голосов
/ 31 августа 2009

У меня есть SQL-запрос, как это:

if table1 exist
    if table1 has data
       select * from table1

if table2 exist
    if table2 has data
       select * from table2
...
tableN

тогда я повторяю набор данных в c # но даже таблица не существует в базе данных, есть пустая таблица результатов в наборе данных, Как написать SQL, чтобы только возвращать не пустые запросы? скажем, у меня есть 10 таблиц, 3 из которых не существуют в базе данных, поэтому только 7 таблиц результатов в возвращенном наборе данных?

Ответы [ 3 ]

1 голос
/ 31 августа 2009

Я имел в виду "есть пустая таблица без столбцов и строк в возвращенном наборе данных"

ааа ... так вы хотите, чтобы у пропавшего стола была заглушка в вашем DataSet? Кажется довольно ... странно - но я думаю, вы могли бы сделать что-то вроде:

if object_id('table2') is not null -- yeuch yeuch yeuch (see below)
begin
    select * from table2
end
else
begin
    select 1 where 1 = 0 
end

Опять же, я подчеркиваю, что нахожу это желание ... необычным; но:

  • если мы select, даже если данных нет, мы просто получаем пустую таблицу, что хорошо
  • если таблица не существует, мы просто получаем заглушку с 1 столбцом и 0 строкой

Существуют более эффективные способы проверки существования объекта - например, проверка таблиц информационной схемы; но я все еще не уверен, что (в общем случае) разумно чрезмерно беспокоиться о существовании / несуществовании таблиц, если вы не:

  • запись инструменты , такие как анализатор запросов или инструмент ORM
  • написание утилиты импотирования данных, которая не может доверять специальным данным
0 голосов
/ 31 августа 2009

довольно сложно догадаться, не зная, о какой базе данных - особенно о связанных сущностях и отношениях - вы говорите ... И, как уже было сказано, вы обычно не проверяете, существует ли таблица заранее - для меня это звучит как вопрос постоянства ...

0 голосов
/ 31 августа 2009

Вы можете легко извлечь информацию о каждой таблице, доступной в вашей базе данных:

use MyDBName
go

select * from sys.tables
go

Используя курсор (хотя я лично избегаю их, если это вообще возможно), вы можете циклически проходить и строить свои запросы динамически, чтобы использовать только доступные таблицы, то есть вы не будете возвращать NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...