我正在嘗試使用 python 運行系統 SP(這是預構建的)pyodbc。事實上,我正在嘗試使用sp_depends '<Object name>';
我正在使用下面的代碼片段。
df_f=[]
l_table = ['table_1','table_2','table_3']
try:
for l in l_table:
sql = """EXEC sp_depends '{0}';""".format(l)
while cur.nextset():
cur.execute(sql)
c = cur.fetchall()
df_l= pd.DataFrame.from_records(c, columns = [desc[0] for desc in cur.description])
df_l['Referenced_Object'] = l
df_f.append(df_l)
break
except pyodbc.Error as err:
s = str(err)
print(s)
finally:
cur.close()
cnxn.close()
上面的代碼沒有運行。它不會引發錯誤,但不會在df_f.
如果我單獨運行上述 SP,我會收到以下錯誤:
ProgrammingError: No results. Previous SQL was not a query.
我從這個SO 執行緒中獲得了幫助。
我無法SET NOCOUNT ON在此 SP 中,因為這是內置的,因此我無法在資料框中獲得所需的資訊。
對此有任何線索嗎?
uj5u.com熱心網友回復:
正如我在評論中提到的,sp_depends已被棄用;它不應該被使用。根據您應該使用的檔案sys.dm_sql_referencing_entities,sys.dm_sql_referenced_entities而不是。
您可以sp_depends使用以下查詢獲得與 類似的結果。您需要用編程語言中的引數替換變數(而不是注入它們):
SELECT CONCAT(re.referenced_schema_name,'.', re.referenced_entity_name) AS [name],
o.type_desc AS [Type],
CASE re.is_updated WHEN 0 THEN 'no' WHEN 1 THEN 'yes' END AS updated,
CASE re.is_selected WHEN 0 THEN 'no' WHEN 1 THEN 'yes' END AS selected,
re.referenced_minor_name AS [column]
FROM sys.dm_sql_referenced_entities(QUOTENAME(@SchemaName) N'.' QUOTENAME(@ObjectName) ,'OBJECT') re
JOIN sys.objects o ON re.referenced_id = o.object_id;
SELECT DISTINCT
CONCAT(re.referencing_schema_name,'.', re.referencing_entity_name) AS [name],
o.type_desc AS [Type]
FROM sys.dm_sql_referencing_entities(QUOTENAME(@SchemaName) N'.' QUOTENAME(@ObjectName) ,'OBJECT') re
JOIN sys.objects o ON re.referencing_id = o.object_id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/408476.html
標籤:
