gpt4 book ai didi

sql-server - 无效的对象名称 - SQL Server 2005

转载 作者:行者123 更新时间:2023-12-04 02:29:05 24 4
gpt4 key购买 nike

当执行以下存储过程时,我得到无效的对象名称 dbo.Approved。对象 dbo.Approved 确实存在,所以大概这与我将表名作为参数传递的方式有关?

我还应该补充一点,我通过 .NET 或从 SMSS 中执行过程时遇到了错误。

 @tableName as nvarchar(100)
AS
BEGIN

EXEC('

UPDATE T1
SET T1.NPTid = dbo.Locations.NPT_ID
FROM ' + '[' + @tableName + '] As T1
INNER JOIN dbo.Locations ON T1.Where_Committed = dbo.Locations.Location_Name
')

END

在收到 Joe 和 JNK 的帮助后进行编辑,存储过程现在是这个,但我收到错误

Msg 102, Level 15, State 1, Procedure sp_Updater, Line 14  

Incorrect syntax near 'QUOTENAME'.

新存储过程

@tableName as nvarchar(100),
@schemaName as nvarchar(20)
AS
BEGIN



EXEC('
--Update NPT
UPDATE T1
SET T1.NPTid = dbo.Locations.NPT_ID
FROM ' + QUOTENAME(@schemaName) + '.' + QUOTENAME(@tableName) + ' As T1
INNER JOIN dbo.Locations ON T1.Where_Committed = dbo.Locations.Location_Name
')

END

最佳答案

在您的字符串中使用方括号,您的表引用将变成无效的 [dbo.Approved]。引用应改为 [dbo].[Approved]

您可能需要考虑将架构名称和表名称作为两个单独的参数传递。

最好使用 QUOTENAME函数而不是对方括号进行硬编码。

declare @sql nvarchar(1000)

set @sql = N'UPDATE T1
SET T1.NPTid = dbo.Locations.NPT_ID
FROM ' + QUOTENAME(@schemaName) + N'.' + QUOTENAME(@tableName) + N' As T1
INNER JOIN dbo.Locations ON T1.Where_Committed = dbo.Locations.Location_Name
'

EXEC (@sql)

关于sql-server - 无效的对象名称 - SQL Server 2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com