存储过程中有如下逻辑的语句:
IF ISNULL(@x,'') = ''
BEGIN SELECT v.*
INTO #T
FROM vEND
ELSE
BEGIN SELECT v.*
INTO #T
FROM vEND
当建立存储过程的时候提示错误:
消息 2714,级别 16,状态 1,过程 usp_sp,第 44 行
数据库中已存在名为 '#T' 的对象。
错误指向else中的into语句行。
IF ISNULL(@x,'') = ''
BEGIN SELECT v.*
INTO #T
FROM vEND
ELSE
BEGIN SELECT v.*
INTO #T
FROM vEND
当建立存储过程的时候提示错误:
消息 2714,级别 16,状态 1,过程 usp_sp,第 44 行
数据库中已存在名为 '#T' 的对象。
错误指向else中的into语句行。
解决方案 »
- 为什么能在ACCESS中执行的update总是报错
- 内容过长无法显示是SQL2000的问题?
- 使用跨服务读取数据的存储过程时,如何设置服务器的地址为参数?
- 数据统计后每字段值*不同数值排序。100分给第一回答正确人
- MS SqlServer2005触发器会造成数据插入堵塞吗
- 怎样实现把一个表的数据按随机顺序导入到另一个结构相同的表中
- 请教一个在商城项目中最常碰到的商品高级筛选功能的SQL语句!
- 救命,sql2000会自动增加日志文件,很快我的硬盘就暴了
- ado是否有连接池?如何设置?和ado.net连接池机制有和区别? ,高手请进,在线等待!!!!
- 请问一下,为什么我在VFP的表中建立的索引能使用?(在表设计器中建立的索引)
- 关于select的问题
- SELECT COUNT(*) 计划数, 生产完成数, 完成百分比 from 数据表 group by 项目编号
BEGIN
exec('if object_id(''tempdb..#t'')is not null drop table tempdb..#t')
SELECT v.*
INTO #T
FROM vEND
ELSE
BEGIN
exec('if object_id(''tempdb..#t'')is not null drop table tempdb..#t')
SELECT v.*
INTO #T
FROM vEND
go
DECLARE @x NVARCHAR(10)
IF ISNULL(@x,'') = ''
BEGIN SELECT v.*
INTO #T
FROM vEND
ELSE
BEGIN
EXEC('
SELECT v.*
INTO #T
FROM v')END
实际上这是出于ifelse分支内的事情,怎么sqlserver也不判断这种情况哪?
是不是它只当所有的代码都顺序执行哪?
up,说到底还是SQL不够智能。
CREATE TABLE #T(...)
IF ISNULL(@x,'') = ''
BEGIN
INSERT INTO #T
SELECT v.*
FROM v
END
ELSE
BEGIN
INSERT INTO #T
SELECT v.*
FROM v
END
create table #T 再在分支中alter table #T
或者可以把if 和else中的语句分别写在不同的存储过程中,再用第三个存储过程来访问#T
我也在考虑 insert into 的实现方式。
INSERT INTO #T 的时候错误:
消息 213,级别 16,状态 1,过程 usp_sp,第 30 行
插入错误: 列名或所提供值的数目与表定义不匹配。INSERT INTO #T(ku) 的时候错误:
消息 207,级别 16,状态 1,过程 usp_sp,第 30 行
列名 'ku' 无效。把临时表的列写出来它会认为没有,不写出来它认为不匹配。
不使用exec的话,就没有办法了吗?
消息 207,级别 16,状态 1,过程 usp_sp,第 30 行
列名 'ku' 无效。”原因是在查询分析器里建了一个 #T,但是结构又不正确,查询分析器拿来做比较,所以就出错了。