SQL 提示必须声明表变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 提示必须声明表变量相关的知识,希望对你有一定的参考价值。
USE [idlist]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ccout]
@lx varchar(10),
@id varchar(30),
@zt varchar(10),
@sjbh varchar(10)
AS
begin
set nocount on
declare @sql nvarchar(500)
declare @int int
if @lx='1'
begin
With T
As
(
Select Top 1 * From @id Where 状态=1 Order by newid() '这里出的错误
)
Update T Set 状态=2
Output inserted.编号,inserted.账号,inserted.密码
end
else
begin
set @sql='update '+@id+' set 状态='+@zt+' where 编号='+@sjbh
exec(@sql)
end
set nocount off
end
对存储过程不太了解,在调试运行存储过程时提示必需声明表变量@id,求大神帮忙
@lx varchar(10),
@id varchar(30),
@zt varchar(10),
@sjbh varchar(10)
AS
begin
set nocount on
declare @sql nvarchar(500)
declare @int int
if @lx='1'
begin
Set @sql='
With T
As
(
Select Top 1 * From '+@id+' Where 状态=1 Order by newid()
)
Update T Set 状态=2
Output inserted.编号,inserted.账号,inserted.密码 '
end
else
begin
set @sql='update '+@id+' set 状态='+@zt+' where 编号='+@sjbh
end
exec (@sql)
set nocount off
end本回答被提问者采纳 参考技术B 看的出@id是一个内存表,你的语句里面没有定义,或者程序不完整追问
ID是一个参数,传进来的表名,请问这样的要如何定义呢
追答据我所知参数是不可以用表的,如果要声明也要知道表结构才行
比如
declare @id table (状态 int)
但你的里面已经存在@id的变量了,所以不能再用@id作表名
在 T-SQL 中,如何在子查询中引用表变量?
【中文标题】在 T-SQL 中,如何在子查询中引用表变量?【英文标题】:In T-SQL, how to reference to table variable in the subquery? 【发布时间】:2010-11-23 03:06:30 【问题描述】:我已经声明了一个表变量“@t”,并正确执行了“INSERT-INTO-SELECT”。 当我试图通过一些额外的计算来查询表变量以进行每组行编号时,我在直接使用“@t”时出现“必须声明变量”或在使用“@t”的别名时出现“无效的对象名称”错误'。请多多指教。
SELECT
*,
(SELECT COUNT(*) FROM "LTV" "COUNTER"
WHERE
"COUNTER"."Collateral_ID" = "LTV"."Collateral_ID"
AND
"COUNTER"."m_il_no" = "LTV"."m_il_no"
AND
"COUNTER"."Ref_Key" <= "LTV"."Ref_Key"
GROUP BY "COUNTER"."Collateral_ID", "COUNTER"."m_il_no"
) "MIL_IDX"
FROM @t AS LTV
【问题讨论】:
【参考方案1】:用途:
SELECT x.*,
y.num
FROM @t x
JOIN (SELECT t.collateral_id,
t.m_il_no,
COUNT(*) AS num
FROM @t t
GROUP BY t.collateral_id, t.m_il_no) y ON y.collateral_id = x.collateral_id
AND y.m_il_no = x.m_il_no
【讨论】:
重点是,我们要在子查询里面声明表变量的别名以上是关于SQL 提示必须声明表变量的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 事务/并发混乱 - 你必须总是使用表提示吗?