SQL Server 2005数据库.我有许多记录的临时表,这些记录是从RSS源,需要周期性地插入.有些数据会改变,有些数据会保持不变.我只需要插入"新"的记录,并消除将导致重复记录的冗余数据的机会.我该如何做到这一点?
示例,tempTable,
BEGIN
INSERT INTO myTable
(
row1
,row2
,row3
)
SELECT
row1
,row2
,row3
FROM @tempTable
END
Run Code Online (Sandbox Code Playgroud) 我使用以下查询在 PostgreSQL 数据库中 创建了一个临时表
SELECT * INTO TEMP TABLE tempdata FROM data WHERE id=2004;
Run Code Online (Sandbox Code Playgroud)
现在我想创建这个临时表的备份tempdata。
所以我使用以下命令行执行
"C:\Program Files\PostgreSQL\9.0\bin\pg_dump.exe" -F t -a -U my_admin -t tempdata myDB >"e:\mydump.backup"
Run Code Online (Sandbox Code Playgroud)
我收到一条消息说
pg_dump: No matching tables were found
Run Code Online (Sandbox Code Playgroud)
是否可以创建 的转储temp tables?
我做得正确吗?
PS:我也想恢复相同的内容。我不想使用任何额外的组件。
TIA。
我正在尝试对 udf 中的临时表运行选择查询。我找不到说明这是不允许的文档,但是当我更改tblDailyPricingAndVol为#dailyPricingAndVolBySymbol(当然是我的临时表。临时表是在更高级别创建的(在存储之前的存储过程中)时,以下存储过程将无法编译使用此功能的程序)如果这会影响任何事情......提前致谢。
编辑:udf 只是作为调用它的存储过程的助手。我试图用它查询一个临时表,因为它每次运行时都会被调用数千次。它检索然后聚合的数据位于一个包含数百万行的表中。因此,我将数据缩减为数百条记录,放入临时表中。这将显着加快函数的运行速度,即使它仍然需要相当长的时间来运行。
ALTER FUNCTION dbo.PricingVolDataAvailableToDateProvided
(@Ticker nchar(10),
@StartDate DATE,
@NumberOfDaysBack int)
RETURNS nchar(5)
AS
BEGIN
DECLARE @Result nchar(5)
DECLARE @RecordCount int
SET @RecordCount = (SELECT COUNT(TradeDate) AS Expr1
FROM (SELECT TOP (100) PERCENT TradeDate
FROM tblDailyPricingAndVol WHERE (Symbol = @Ticker) AND (TradeDate IN
(SELECT TOP (@NumberOfDaysBack) CAST(TradingDate AS DATE) AS Expr1
FROM tblTradingDays
WHERE (TradingDate <= @StartDate)
ORDER BY TradingDate DESC))
ORDER BY TradeDate DESC) AS TempTable)
IF @RecordCount = @NumberOfDaysBack
SET …Run Code Online (Sandbox Code Playgroud) 我在删除SQL Server中的临时表时遇到问题.
我有一个存储过程但是当我通过我的应用程序运行它说:
"数据库中已经有一个名为'#WeekList'的对象"
当我尝试删除表时,我收到以下消息:
无法删除表'#WeekList',因为它不存在或您没有权限.
我的SP如下:
USE [test_staff]
GO
/****** Object: StoredProcedure [dbo].[sp_create_week_list] Script Date: 03/20/2012 09:35:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_create_week_list]
AS
CREATE TABLE #WeekList
(
month_date date
)
DECLARE @REPORT_DATE DATETIME, @WEEK_BEGINING VARCHAR(10)
SELECT @REPORT_DATE = '2011-01-19T00:00:00'
--SELECT @REPORT_DATE = GETDATE() -- should grab the date now.
SELECT @WEEK_BEGINING = 'MONDAY'
IF @WEEK_BEGINING = 'MONDAY'
SET DATEFIRST 1
ELSE IF @WEEK_BEGINING = 'TUESDAY'
SET DATEFIRST 2
ELSE IF @WEEK_BEGINING = …Run Code Online (Sandbox Code Playgroud) 我在查询中使用不同的临时表。当我执行下面的查询时
select * from myView
Run Code Online (Sandbox Code Playgroud)
执行仅需5秒。
但是当我执行时
select * into #temp from myView
Run Code Online (Sandbox Code Playgroud)
需要 50 秒(是上面查询的 10 倍)。
我们从 SQL Server 2000 迁移到 SQL Server 2008 R2。之前在 SQL 2000 中,这两个查询需要相同的时间,但在 SQL Server 2008 中,执行时间要多出 10 倍。
我正在尝试创建一个存储过程,它将能够限制使用部门ID返回的记录数.我试图通过加入临时表来限制记录.
当我运行下面的代码时,我得到错误:
只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'#department'中标识列的显式值.
这是代码:
DECLARE @departmentID INT
SET @departmentID = 4
-- create temp department table --
select top 0 * into #department from PayrollDepartment
-- load temp department table
IF @departmentID < 1 OR @departmentID IS NULL
BEGIN
INSERT INTO #department SELECT * FROM PayrollDepartment
END
ELSE
BEGIN
INSERT INTO #department SELECT * FROM PayrollDepartment WHERE PayrollDepartmentID = @departmentID
END
Run Code Online (Sandbox Code Playgroud)
我开始时:
IF @departmentID < 1 OR @departmentID IS NULL
BEGIN
SELECT * INTO #department FROM ApplicationEmployeeInfo..PayrollDepartment
END
ELSE
BEGIN …Run Code Online (Sandbox Code Playgroud) 我想在 MS SQL Server BIDS(SSMS 和 Visual Studio)中创建一个报告。用户将输入电子邮件地址列表作为参数。所以@pEmails 将是“foo@bluh.com”、“bar@meh.org”等。这些电子邮件地址可能在也可能不在表中。
我可以简单地做:
and Table.Email in (@pEmails)
这行得通,除非我还需要返回电子邮件地址(如果找不到)。所以结果将是这样的:
|email |found in table|
|------------|--------------|
|foo@bluh.com| Y |
|bar@meh.org | N |
Run Code Online (Sandbox Code Playgroud)
我想我可以将输入的值列表作为@pEmails 参数并用它们创建一个临时表,然后我可以将其加入,但我这样做的尝试没有成功。
declare @pEmails table (EmailAddress varchar(255));
insert into @pEmails values (@ReportParameter1);
select
*
from
@pEmails
Run Code Online (Sandbox Code Playgroud)
如果只将单个值放入@ReportParameter1,则上述方法有效,但如果其中包含多个值,则无效。
我正在使用 SQL Server 2008。有关如何最好地进行的任何建议?
我们有一个 MySQL Master,运行在 1TB SSD 上,带有 500GB 数据库。正如您从下面的屏幕截图中看到的,我们的空间已经用完了,因为ibtmp1它变得太大了。现在是194GB。
MySQL手册说:
“当数据文件达到最大大小时,查询将失败并显示错误,表明表已满。”
因此我们有两个担忧:
我确信手册有误导性或者我们有误解,因为MySQL的默认设置不可能允许它填满磁盘然后失败?
我们可以在临时表上创建触发器和事务吗?
当用户将插入数据时,如果它已提交,则触发器将被触发,并且该数据将从临时表进入实际表.
当SQL服务停止或服务器将关闭时,临时表将自动删除.
或者我应该使用另一个实际的表,其中首先插入数据,然后如果它被提交,则触发器将被触发,数据将被发送到主表,然后我将执行截断查询以删除数据从接口表中删除重复数据.
我在代码中创建临时表#temp1,然后在代码中插入表.我想在调试代码时选择sqlserver中的表.但它不能.sql server提示没有名为talbe的名字.甚至在数据库tempdb中.调试时如何在数据库中选择临时表?
temp-tables ×10
sql-server ×6
sql ×4
t-sql ×3
bids ×1
dump ×1
innodb ×1
insert ×1
mysql ×1
parameters ×1
postgresql ×1
triggers ×1