Сторонняя БД, которую мы читаем в ADO.Net, недавно добавила столбец в новую версию своего кода. Ключ к новому столу.
У нас есть доступ только для чтения к таблицам данных, поэтому в теории не может полагаться на схему для этого. Так...
1) доступен ли INFORMATION_SCHEMA всегда для элементов, к которым вы можете получить доступ, или возможно, у нас не будет прав даже на таблицы, которые мы можем читать?
2) если (1) «плохо», каким будет каноническое решение? В самом SQL я бы сделал SELECT * FROM x WHERE 1=0, а затем протестировал заголовки, есть ли эквивалентный тест в .Net?
Я очень не решаюсь использовать схему в этом случае.
мы используем SELECT TOP (0) * from (ваш оператор select идет туда) a. для проверки всех ссылок. Основное отличие вашего подхода (1 = 0) заключается в том, что в моей версии вы можете добавить ORDER BY во внутренний запрос. Возможно, вам это не понадобится, так как нам нужно было проверить весь запрос, который может иметь любую форму, а не только один столбец.
Хорошее замечание, Дмитрий, так и сделаю в будущем.





Вы можете перечислить имена столбцов (значения не являются обязательными) из любой таблицы или запроса с помощью небольшого XML.
Пример
Declare @AnyTableOrQuery Table (EmpID int,EmpName varchar(50),Salary int,Location varchar(100))
Insert Into @AnyTableOrQuery Values
(1,'Arul',100,null)
,(2,'Jane',120,'New York')
Select B.*
From ( values (cast((Select Top 1 * From @AnyTableOrQuery for XML RAW,ELEMENTS XSINIL) as xml))) A(XMLData)
Cross Apply (
Select Column_Name = a.value('local-name(.)','varchar(100)')
,Column_Value = a.value('.','varchar(max)')
From A.XMLData.nodes('/row') as C1(n)
Cross Apply C1.n.nodes('./*') as C2(a)
) B
Возврат
Column_Name Column_Value
EmpID 1
EmpName Arul
Salary 100
Location
EDIT
@MauryMarkowitz Предоставил гораздо лучшее решение (см. Комментарий ниже)
sp_describe_first_result_set @tsql = N'Select * from YourTable'
Очаровательный! Я ненавижу работать с XML в SQLS, но это решение!
@MauryMarkowitz Рад помочь. Я медленно воспринял XML, но «обнаружил» его полезность в определенных ситуациях.
@MauryMarkowitz Если все решения SQL подходят, я бы использовал sp_describe_first_result_set
@MauryMarkowitz ОЧЕНЬ ЛУЧШЕ !! Спасибо за совет
@MauryMarkowitz Я обязательно добавлю эту стрелу в свой колчан. Он предоставляет больше информации, но имеет несколько недостатков ... удвоение среднего времени выполнения 403 мс по сравнению с 198 мс, и, будучи SP, он плохо интегрируется в TVF. В любом случае, еще раз спасибо за направление.
@JohnCappelletti being a sp it does not integrate well in a TVF - sys.dm_exec_describe_first_result_set
@GSerg Вот и все! Я делаю глубокое погружение, чтобы увидеть, что еще я пропустил. Этим утром я чувствовал себя довольно хорошо. Теперь не так уж и много. :)
Информационная схема кажется, вероятно, лучшим выходом. Да, возможно, у вас не будет доступа, в зависимости от разрешений вашего пользователя.