gpt4 book ai didi

SQL 声明变量

转载 作者:行者123 更新时间:2023-12-02 06:35:35 27 4
gpt4 key购买 nike

任何人都可以检查我的声明...

DECLARE @tblName varchar(MAX), 
@strSQL varchar(MAX)

SET @tblName ='SELECT DISTINCT o.name as TableName
FROM sysobjects o
JOIN sysindexes x on o.id = x.id
WHERE o.name LIKE ''%empty%'''

SET @strSQL = 'INSERT INTO @tblName VALUES(''trylng'', ''1'')'
EXEC (@strSQL)

我的错误是...

Msg 1087, Level 15, State 2, Line 1
Must declare the table variable "@tblName".

最佳答案

您的@tblName属性存在于外部范围 - 您的“正常”代码行的范围 - 但不存在于您在字符串中构造的SQL的内部范围... .

您需要将行更改为:

SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')'

然后它应该可以正常工作。

此外,您没有提及您的 SQL Server 版本 - 但从 SQL Server 2005 或更高版本开始,您应该停止使用 sysobjectssysindexes - 相反,使用新的 sys 架构包含或多或少相同的信息 - 但更容易获得。将您的查询更改为:

SET @tblName ='SELECT DISTINCT t.name as TableName 
FROM sys.tables t
INNER JOIN sys.indexes i on i.object_id = t.object_id
WHERE t.name LIKE ''%empty%'''

参见MSDN: Querying the SQL Server System Catalog有关新 sys 架构中可用内容以及如何充分利用它的更多信息!

正如“rsbarro”指出的那样:将此 SQL 语句放在引号中很奇怪 - 您是否也使用 EXEC(...) 执行此语句?但是,如何将值分配回 @tblName 属性呢?实在是没有道理……

如果你想实际运行这个查询来获取一个值,你应该有这样的东西:

 SELECT TOP 1 @tblName = t.name
FROM sys.tables t
INNER JOIN sys.indexes i on i.object_id = t.object_id
WHERE t.name LIKE '%empty%'

您需要有一个TOP 1,才能确定只获取单个值 - 否则此语句可能会失败(如果选择了多行)。

关于SQL 声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407703/

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