我有一个返回错误的过程:
必须声明表变量“ @PropIDs”。
但随后出现以下消息:
(受影响的123行)
使用以下命令执行时出现错误
EXEC [dbo].[GetNeededProperties] '1,3,5,7,2,12', '06/28/2013', 'TT'
但是在以下情况下可以正常工作
EXEC [dbo].[GetNeededProperties] NULL, '06/28/2013', 'TT'
有人可以帮我吗?步骤:
CREATE PROCEDURE [dbo].[GetNeededProperties]
@NotNeededWPRNs nvarchar(max), --string like '1,2,3,4,5'
@LastSynch datetime,
@TechCode varchar(5)
AS
BEGIN
DECLARE @PropIDs TABLE
(ID bigint)
Declare @ProductsSQL nvarchar(max);
SET @ProductsSQL = 'Insert into @PropIDs (ID)
SELECT [WPRN] FROM [dbo].[Properties] WHERE(WPRN in (' + @NotNeededWPRNs + '))'
exec sp_executesql @ProductsSQL
SELECT p.WPRN AS ID,
p.Address AS Address,
p.Address AS Street
FROM [dbo].[Properties] AS p
WHERE
p.WPRN NOT IN( SELECT ID FROM @PropIDs)
我在声明这样的表时找到了一种解决方案:
IF OBJECT_ID('#PropIDs', 'U') IS NOT NULL
DROP TABLE #PropIDs
CREATE TABLE #PropIDs
但是,当从C#(linq html" target="_blank">sql)执行过程时,它将返回错误
问题在于您正在将动态SQL与非动态SQL混淆在一起。
首先-将NULL放入@NotNeededWPRNs时起作用的原因是,当该变量为NULL时,您的@ProductsSQL变为NULL。
您需要做的是使@PropsIDs表成为非表变量,并使之成为临时表或物理表。或者,您需要将所有内容包装在动态SQL中并执行。
因此,简单的方法是执行以下操作:
Declare @ProductsSQL nvarchar(max);
SET @ProductsSQL = '
DECLARE @PropIDs TABLE
(ID bigint)
Insert into @PropIDs (ID)
SELECT [WPRN] FROM [dbo].[Properties] WHERE(WPRN in (' + @NotNeededWPRNs + '))
SELECT p.WPRN AS ID,
p.Address AS Address,
p.Address AS Street
FROM [dbo].[Properties] AS p
WHERE
p.WPRN NOT IN( SELECT ID FROM @PropIDs)
'
并执行。或如前所述-将@ProdIDs更改为临时表。(您正在CREATE
本文向大家介绍MySQL 声明变量及存储过程分析,包括了MySQL 声明变量及存储过程分析的使用技巧和注意事项,需要的朋友参考一下 声明变量 设置全局变量 set @a='一个新变量'; 在函数和储存过程中使用的变量declear declear a int unsigned default 1; 这种变量需要设置变量类型 而且只存在在 begin..end 这段之内 select .. into
问题内容: 我正在尝试使用EF5从bcontext.Database.SqlQuery执行存储过程。 它抛出一个错误 如果customerNumber是staff,则SP返回,否则返回行。 如何处理? 问题答案: 由于使用的是命名参数,因此必须为要传递的参数指定匹配名称。
错误消息: [Microsoft][ODBC驱动程序for Oracle][Oracle]ORA-06550:第1行,第7列:PLS-00201:标识符STORED_PROCEDURE必须声明ORA-06550:第1行,第7列:PL/SQL:语句被忽略
这是我成功的存储过程 这是首先生成表的调用 最初,我试图用一些预定义的参数调用存储过程。 这导致错误“PLS-00201:标识符'B100'必须声明” 我是PL/SQL的新手,很难解决这个问题。我尝试添加DECLARE语句 这仍然会导致错误“PLS-00201:必须声明标识符‘B100’”,但它表示“PL/SQL:忽略语句”,然后表示“PLS-00201:必须声明标识符‘Steve’” 进一步挖掘
作为标题,我正在Oracle上编写一些存储过程,首先我检查了版本 有结果 ... 并尝试NVL2与常规SQL查询 结果似乎是对的 ... 所以我确认11g确实支持NLV2功能,我现在可以开始编写我的存储过程,如下所示: Oracle告诉我它编译有错误,即 PLS-00201:必须声明标识符“NVL2” 为什么函数在常规查询中工作,但在存储过程中变得未声明?
我试着按照步骤在Toad中运行以下代码 1。初始化变量2并为其分配日期。打印出来确认3。然后使用变量检查日期范围的my when子句<你知道我做错了什么吗? --检查我的time子句 --检查:this_day之间(2018年4月1日至2018年12月1日) ORA-06550:第1行,第21列:PLS-00201:标识符“01-JAN-2018”必须声明ORA-06550:第1行,第7列:PL/