2016-10-03 28 views
-2

我正在修改mssqltips.com中的腳本,該腳本生成腳本以重新創建數據庫中的所有索引。我將它放在TRY中,CATCH將調用一個存儲過程並傳遞它5個參數。其中之一,c.name旨在成爲父表的主鍵,但引發「多部分標識符」c.name「無法綁定」。錯誤。對於代碼的長期使用感到抱歉,但認爲它看起來很重要。 enter image description hereSQL:多部分標識符「c.name」無法綁定

我發佈了一個圖像,因爲SQL非常大,並認爲語法高亮會有幫助。這是我現在在哪裏。

SELECT @create += N'BEGIN TRY ALTER TABLE ' + QUOTENAME(cs.name) + '.' + QUOTENAME(ct.name) + ' ADD CONSTRAINT ' + QUOTENAME(fk.name) + ' FOREIGN KEY (' + STUFF((SELECT ',' + QUOTENAME(c.name) 
FROM sys.columns AS c 
    INNER JOIN sys.foreign_key_columns AS fkc ON fkc.parent_column_id = c.column_id AND fkc.parent_object_id = c.[object_id] 
WHERE fkc.constraint_object_id = fk.[object_id] 
ORDER BY fkc.constraint_column_id 
FOR XML PATH(N''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'') + ') REFERENCES ' + QUOTENAME(rs.name) + '.' + QUOTENAME(rt.name) + '(' + STUFF((SELECT ',' + QUOTENAME(sc.name) 
FROM sys.columns AS sc 
INNER JOIN sys.foreign_key_columns AS fkc ON fkc.referenced_column_id = sc.column_id AND fkc.referenced_object_id = sc.[object_id] 
WHERE fkc.constraint_object_id = fk.[object_id] 
ORDER BY fkc.constraint_column_id 
FOR XML PATH(N''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'') + '); END TRY BEGIN CATCH EXEC pr_purged_orphaned ' 
    + QUOTENAME(ct.name) + ' , ' + QUOTENAME(fk.name) + ' , ' + QUOTENAME(c.name) + ' , ' + QUOTENAME(rt.name) + ' , ''_cID_project_''' FROM sys.foreign_keys AS fk 
INNER JOIN sys.tables AS rt ON fk.referenced_object_id = rt.[object_id] 
INNER JOIN sys.schemas AS rs ON rt.[schema_id] = rs.[schema_id] 
INNER JOIN sys.tables AS ct ON fk.parent_object_id = ct.[object_id] 
INNER JOIN sys.schemas AS cs ON ct.[schema_id] = cs.[schema_id] WHERE rt.is_ms_shipped = 0 AND ct.is_ms_shipped = 0; 
+2

你應該發佈你的實際查詢,而不僅僅是它的圖像。但是,最後一次引用'quotename(c.name)'的'from'語句中不包含'sys_columns' ... – sgeddes

+1

發佈SQL語句的*圖像*(屏幕截圖)幾乎是無用的。 – spencer7593

回答

0

在內聯查詢中沒有包含'c'作爲別名的對象。這就是得到這個錯誤的原因。如果你想獲得列名,那麼使用'sc.name'而不是'c.name'。

+0

我其實已經嘗試過,結果相同。奇怪的是,我可以引用rt.name,ct.name&fk.name而不存在問題。 – Dan

+0

你可以放置你的實際代碼而不是圖像嗎? –

0

但正如其他人所指出的,我的內聯查詢中沒有別名。一旦我將代碼格式化了,我就可以看到它。將sys.columns加入sys.tables將解決該問題。

相關問題