在 SQL Server 中,是否有一種簡單的方法可以從 SELECT 陳述句中輸出完全限定的欄位名稱串列,即使使用別名也是如此?
例如:
SELECT
a.FieldName1
, a.FieldName2
, CASE WHEN a.FieldName9 = 'A' and b.FieldName10 = 'C' Then 'Yes' Else 'No' END as AliasedCase
FROM DatabaseA.dbo.Table1 a
JOIN DatabaseB.dbo.Table2 b on a.FieldName4 = b.FieldName4
WHERE b.FieldName8 Between 1 and 4
輸出串列如下所示:
- 資料庫A.dbo.Table1.FieldName1
- 資料庫A.dbo.Table1.FieldName2
- 資料庫A.dbo.Table1.FieldName4
- 資料庫A.dbo.Table1.FieldName9
- 資料庫B.dbo.Table2.FieldName4
- 資料庫B.dbo.Table2.FieldName8
- DatabaseB.dbo.Table2.FieldName10
uj5u.com熱心網友回復:
您可以使用它創建一個視圖或程序SELECT,使用該sys.dm_sql_referenced_entities函式獲取資訊,然后洗掉它。
create view dbo.MyTempView
as
SELECT
a.FieldName1
, a.FieldName2
, CASE WHEN a.FieldName9 = 'A' and b.FieldName10 = 'C' Then 'Yes' Else 'No' END as AliasedCase
FROM DatabaseA.dbo.Table1 a
JOIN DatabaseB.dbo.Table2 b on a.FieldName4 = b.FieldName4
WHERE b.FieldName8 Between 1 and 4
select CONCAT(
dep.referenced_server_name '.',
dep.referenced_database_name '.',
dep.referenced_schema_name '.',
dep.referenced_entity_name '.',
dep.referenced_minor_name)
from sys.dm_sql_referenced_entities('dbo.MyTempView', 'OBJECT') dep
where dep.referenced_minor_name is not null;
drop view dbo.MyTempView;
使用CONCATwith '.'意味著空值及其關聯的 將被忽略.,因此它只會告訴您您使用的實際參考,如果您沒有指定它,它將無法確定使用哪個資料庫或模式(由于范圍問題) ,因為這取決于您的默認資料庫和架構在執行時是什么)。
uj5u.com熱心網友回復:
嘗試如下:
SELECT
c.object_id,
o.name AS ObjName,
c.name FieldName,
c.column_id,
c.system_type_id,
c.user_type_id,
c.max_length,
c.precision,
c.scale,
c.collation_name,
c.is_nullable,
c.is_ansi_padded,
c.is_rowguidcol,
c.is_identity,
c.is_computed,
c.is_filestream,
c.is_replicated,
c.is_non_sql_subscribed,
c.is_merge_published,
c.is_dts_replicated,
c.is_xml_document,
c.xml_collection_id,
c.default_object_id,
c.rule_object_id,
c.is_sparse,
c.is_column_set,
c.generated_always_type,
c.generated_always_type_desc,
c.encryption_type,
c.encryption_type_desc,
c.encryption_algorithm_name,
c.column_encryption_key_id,
c.column_encryption_key_database_name,
c.is_hidden,
c.is_masked,
c.graph_type,
c.graph_type_desc ,
o.object_id,
o.principal_id,
o.schema_id,
o.parent_object_id,
o.type,
o.type_desc,
o.create_date,
o.modify_date,
o.is_ms_shipped,
o.is_published,
o.is_schema_published
FROM
sys.all_columns c
INNER JOIN
sys.all_objects o ON o.object_id = c.object_id
通過該查詢,您可以獲得具有資料庫列名的所有表和其他物件。然后您可以根據需要進行過濾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387422.html
標籤:sql sql-server 查询语句
上一篇:大查詢中從Airtable到正確和真實DateStamp的十進制字串樣式的日期戳
下一篇:如何計算隨時間移動的平均值?
