我正在修改mssqltips.com中的脚本,该脚本生成脚本以重新创建数据库中的所有索引。我将它放在TRY中,CATCH将调用一个存储过程并传递它5个参数。其中之一,c.name旨在成为父表的主键,但引发“多部分标识符”c.name“无法绑定”。错误。对于代码的长期使用感到抱歉,但认为它看起来很重要。 SQL:多部分标识符“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;
你应该发布你的实际查询,而不仅仅是它的图像。但是,最后一次引用'quotename(c.name)'的'from'语句中不包含'sys_columns' ... – sgeddes
发布SQL语句的*图像*(屏幕截图)几乎是无用的。 – spencer7593