我对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“ ,”
例如,如果我在表仍然有这样的条目时运行了代码。
然后它将所有结果显示在csv文件中
然后在3月6日再次更新数据库
我希望可以重新创建的excel文件只有该条目。
答案 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","