我只能用来从表中获取新条目的查询,过程或逻辑

时间:2019-04-04 08:38:54

标签: sql sql-server

我对SQL还是很陌生,并试图为此找到解决方案。

我有一个包含多个表的数据库,然后使用sqlcmd将每个表的所有条目导出到一个csv文件(每个表一个csv文件)

然后将我对excel文件的处理放入Azure的blob容器中。

我将如何做到这一点,以便每当表上有新条目或更新时,它将创建一个excel文件,然后在其上输入新条目?没有旧条目。

我仅使用SQL Server Express,不能使用SQL Server Standard。

下面的代码将导出表中的所有条目。

sqlcmd -s“服务器名” -d“数据库名” -u用户名-P密码-Q“从dbo.tbl_check选择*” -o“ C:\ Test \ dbo_tbl_check.csv” -W -w 1024 -s“ ,”

例如,如果我在表仍然有这样的条目时运行了代码。

picture1

然后它将所有结果显示在csv文件中

picture2

然后在3月6日再次更新数据库

picture3

我希望可以重新创建的excel文件只有该条目。

picture4

1 个答案:

答案 0 :(得分:0)

创建一个表以记住上一次导出的ID:

Create Table IncrementalExportMem
(
TableName NVARCHAR(200) NOT NULL,
LastId INT NOT NULL CONSTRAINT DF_IncrementalExportMem_LastId DEFAULT(0),
CONSTRAINT PK_IncrementalExportMem PRIMARY KEY CLUSTERED (TableName)
)

创建导出表的过程:

CREATE Procedure spIncrementalExport
@TableName NVARCHAR(200),
@IdField NVARCHAR(200),
@SelectColumns NVARCHAR(max)='*'
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX)
DECLARE @LastID INT
DECLARE @NextLastId INT

    SELECT @LastID FROM IncrementalExportMem WHERE Tablename=@TableName

IF @LastID IS NULL
BEGIN
    INSERT INTO IncrementalExportMem(tableName) VALUES(@TableName)
    SET @LastID=0
END

SET @SQL='SELECT @NextLastId=MAX('+ @IdField +') FROM '+@TableName
exec sp_executesql @SQL,N'@NextLastId INT OUTPUT',@NextLastId OUTPUT

SET @NextLastId= ISNULL(@NextLastId,0)


SET @SQL=CONCAT('SELECT ',@SelectColumns,' FROM ',@TableName,' WHERE ',@IdField,'>',@LastID,' AND ',@IdField,'<=',@NextLastId)
exec sp_executesql @SQL

UPDATE IncrementalExportMem SET LastId=@NextLastId WHERE Tablename=@TableName

END

在脚本中使用命令:

sqlcmd -s "servername" -d "databasename" -u username -P password -Q "exec spIncrementalExport 'your_table','id_in_table'" -o "C:\Test\dbo_tbl_check.csv" -W -w 1024 -s","