我有两个存储过程: SP1和SP2。它们都包含临时表# temp,但是两个存储过程的表结构不同。
还有第三个存储过程,即从SP1和SP2调用的SP3,它更新#Temp中的列。
SP3是这样的:
if @CallingSP = SP1
begin update #Temp
set ColumnA= 'abc'
end
if @CallingSP = SP2
begin update #Temp
set ColumnB= 'xyz'
end
现在,"ColumnA“列仅存在于SP1中,"ColumnB”列仅存在
我正在使用下面的代码来检查临时表是否存在,并删除表,如果它存在之前再次创建。 只要我不改变列,它工作正常。 如果我稍后添加一列,它会给出一个错误说“无效列”。 请让我知道我做错了什么。
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYI
我需要从使用#temp表切换到@table变量,以便在函数中使用它。
我的查询使用insert into #temp (来自多个表),如下所示:
SELECT
a.col1,
a.col2,
b.col1...
INTO #temp
FROM ...
有没有一种简单的方法可以找出#temp表中列的数据类型,以便我可以创建与#temp具有相同列和数据类型的@table变量?
在编写脚本时,通常需要更改临时表中的列。尽管受到drop-table-if-exists语句的保护,但由于列没有更改,它失败了。为什么?
一个例子,大致显示了我的意思,为什么这个脚本不能工作?当重新创建#t表示“数据库中已经有一个名为‘t’的对象时,它就失败了。”
它感觉像是SQL server作弊,只清空表而不删除它。
if exists (select * from tempdb..sysobjects where id=object_id('tempdb..#t'))
drop table #t
create table #t (
a int
)
if
下面代码中的条件拖放表行似乎不起作用。它执行时没有出现错误,但是接下来的一行错误表示对象ID已经存在,所以它实际上并没有删除表。
有什么想法吗?
我正在使用ADO通过OLE DB (SQLOLEDB提供程序)连接到MS 2005数据库。
'Create a temporary table on the SQL Server and insert into it the info for the end part
With ADOcmA
Set .ActiveConnection = mObjCON
.CommandType = adCmdText
.Comman
我正试图为数据库中的某些存储过程生成一个使用情况报告。视图sys.dm_exec_操作步骤_统计数据包含了我需要的一些内容,所以我决定从这里开始。
Server按对象ID来键入过程元数据。我只知道过程名称,所以首先我必须使用对象_ID函数将这些名称映射到ID。
有几个过程需要检查,所以在处理它们之前,我想把它们的名字放在临时表中。
我认为从temp表中的计算列获取对象id是很可爱的,所以我创建了这样一个表:
USE msdb;
GO
CREATE TABLE #procs (
name SYSNAME,
[object_id] AS OBJECT_ID(name)
);
INSER
我正在使用Server 2012。当我想创建一个名为#TBL1的临时表,或者重新运行我的代码时,我会得到以下错误:
数据库中已经有一个名为‘#TBL1 1’的对象
因此,我将以下代码添加到查询中:
IF OBJECT_ID('dbo.#TBL1', 'U') IS NOT NULL
DROP TABLE dbo.#TBL;
但是它显示了相同的错误消息。
请告诉我出了什么事
我在将用户定义的表类型用作临时存储过程的参数类型时遇到了问题。
我正在数据库中完成所有这些工作,其中存放了临时表、临时存储过程、.任何事都可以。
代码如下所示:
CREATE TYPE test_type AS TABLE (user int, user_value int)
GO
CREATE PROCEDURE #test_pro
@input test_type READONLY
AS
SELECT TOP 10 *
FROM @input
GO
我知道错误:
参数或变量@input的数据类型无效。
是否有一种方法可以将数据类型test_type
我一直在创建一个存储过程来自动向维度表中添加“伪行”(例如-1 =‘未知’,-2 =‘无’等等)。
由于我们有几个包含datamart数据的数据库,所以我选择将它作为一个可以从多个数据库共享的系统存储过程。该过程查询本地数据库系统表(sys.tables、sys.columns、sys.schema)以构造动态SQL语句,然后执行该语句。
但是,存储过程没有按预期工作:尽管将该过程标记为系统存储过程,但它仅在主数据库的上下文中工作。
下面是一个简单的实现,说明了这个问题:
USE Master
GO
CREATE PROCEDURE dbo.sp_WhereAmI
AS SELECT
我需要在表变量中插入数据到临时表中,但它会给出以下错误。
Msg 208,16级,状态0,过程sp_CreateScenario_q2,第70行
无效的对象名“#tmpp1 1”。
这是代码
IF OBJECT_ID('tempdb..#tmpp1') IS NOT NULL
DROP TABLE #tmpp1
INSERT INTO #tmpp1
SELECT
[PlanningHierarchyId]
,[ProductReferenceId]
,[PlanningYear]
,[Pla
我有一个包含列的表,比如Databasename,tablename,columnname,query。但是在查询列SELECT COUNT(MachineName) AS Cnt FROM Keys WHERE MachineName<>NULL中。
如何在表中执行此查询列(我需要与查询列的执行剩余3列),任何人可以帮助我这一点。
我对这个过程有个问题。它使用了几个临时表,然后将其删除并重新创建。这导致了大量的崩溃,我只能假设冲突正在产生。
ALTER PROCEDURE [dbo].[AdditionalVisits_SelectByOrigID]
(
@orig_job_ID int
)
as
if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'additionalVisitsPodsCnt')
drop table additionalVisitsPodsCnt;
SELECT CON
我有一张这样的桌子:
IF OBJECT_ID('tempdb..#A') IS NOT NULL
DROP TABLE #A
CREATE TABLE #A (AccountID BIGINT,MemberID VARCHAR(12),FirstName VARCHAR(50),LastName VARCHAR(50))
INSERT INTO #A VALUES('32323','Test3','Last4','999122'),('192506','999158','
我有一个自定义的导入工具,批量插入的数据在临时(421776行)。之后,该工具将未知行插入到目标表中,并基于散列键(2列的组合)更新现有行。目标db具有几乎相同的行数。update查询看起来像这样(少了大约20个更新列)
update targetTable set
theDB.dbo.targetTable.code=temp.code,
theDB.dbo.targetTable.name=temp.name,
from [tempDB].[dbo].[targettable] as temp
where theDB.dbo.targetTa
USE XXX
go
CREATE GLOBAL TEMPORARY TABLE #dbo.tbl_gbl_temp11
(parent_deal_id numeric(10,0) not null,
deal_id numeric(10,0) not null,
code_name varchar(100) null
)
go
IF OBJECT_ID('dbo.tbl_gbl_temp1') IS NOT NULL
PRINT '<<< CREATED TABLE dbo.tbl_gbl_temp1 >>>
我想获得一个临时表中的列的列表,类似于INFORMATION_SCHEMA.columns视图。但是,下面的代码:
select *
from tempdb.INFORMATION_SCHEMA.columns
where TABLE_CATALOG = 'tempdb'
and TABLE_NAME like '#myTemporaryTable%'
每列和每个会话返回一行。这样做安全吗:
select distinct column_name,data_type
from tempdb.INFORMATION_SCHEMA.columns
我有最后一个临时表(#tempTable),列号未知。我最后的选择是这样的,它起作用了:
SELECT temp.* FROM #tempTable temp
但是,我不想把每一列都称为“*”,而是单独地称呼每一列:
SELECT temp.col1, temp.col2 FROM #tempTable temp
要做到这一点,我需要迭代我的列名并创建一个过程,我尝试了这样的方法:
DECLARE @ColName VARCHAR(255)
SELECT @ColName = min(name) FROM tempdb.sys.columns
WHERE obje
如何在Server中将select查询的列标题检索为单个列?(首选检索列的数据类型)
查询示例:
select a.PartId, a.PartName, b.GroupName
from Parts as a
inner join Groups as b on a.GroupRef = b.GroupId
预期结果:
Columns
--------
PartId
PartName
GroupName
当我需要现有表的列时,我使用查询:
SELECT c.[name]
FROM
(SELECT * from syscolumns) c
INNER JOIN
(SELECT [id] from sysobjects where name= 'tableName') o on c.[id]=o.[id]
我需要在runTime期间创建的表的字段:
select
a.ID,
b.lName,
b.fName
into #T
from
a
inner join
b on a.id=b.i
我必须从一个表中获取一些数据,这个表的名称是在运行时定义的,所以我使用的方法是先将数据选择到全局临时表中,然后再选择到我的实际临时表中。但我得到的列名或提供的值的数量与表定义不匹配。A我不明白为什么它要尝试匹配列,因为它是select into语句。我的代码是:
IF OBJECT_ID('tempdb.dbo.#tempData') IS NOT NULL
DROP TABLE #tempData
if object_id('tempdb..##temptbl') is not null
begin
dr
我正在从事java项目,在该项目中,我使用Sybase和Apache 获取表数据,其information.Now "ddl in tran“选项为真,但当我使用Apache获取列详细信息时,仍然会出错:
com.sybase.jdbc4.jdbc.SybSQLException:在'tempdb‘数据库中的多语句事务中不允许使用“CREATE”命令。
我在Windows 10上安装了Sybase ASE 15.5。
在我的存储过程中,我添加了一个命令来创建散列临时表#DIR_CAT。但每次执行该过程时,我都会收到这样的错误:“数据库中已经有一个名为'#DIR_Cat‘的对象。”即使我已经在SP的开头创建了Exists子句来检查和删除表(如果它存在)。任何帮助都是非常感谢的。
代码是这样的。
if exists (select * from dbo.sysobjects where id = object_id(N'#DIR_Cat') )
drop table #DIR_Cat
/* some lines of code*/
CREATE TABLE #DIR_
对于Server单元测试,在计算“获取所有行”存储过程的结果时,我试图抑制返回所有行。为此,我试图将结果写入临时表。
我从指向当前服务器和数据库的链接服务器条目开始。
IF NOT EXISTS (SELECT * FROM sys.servers WHERE NAME = 'DB_LOCAL')
BEGIN
DECLARE @DBNAME VARCHAR(MAX) = (SELECT DB_NAME())
EXEC sp_addlinkedserver @server = 'DB_LOCAL', @srvproduct = ''