gpt4 book ai didi

sql - SQL动态地将数据从数据库存储到另一个数据库

转载 作者:行者123 更新时间:2023-12-04 20:53:19 25 4
gpt4 key购买 nike

大家好,我是新来的,我需要您的帮助。
我正在构建一个sql查询,其目的是从导入的数据库中将数据从excel文件获取到将保存该信息的现有数据库。
我不想为此建立一个LINQ查询。我想建立一个本地SQL查询。

该查询仅存在问题。让我们进入那个^^。

DECLARE Data CURSOR FOR
SELECT [N#ºContab] FROM EFA..Eventos

DECLARE @N#ºContab NVARCHAR(200)
DECLARE @AssociadoId INT

DECLARE @LoopNum INT = 0
DECLARE @LoopRows INT

OPEN Data

SET @LoopRows = @@CURSOR_ROWS

WHILE @@FETCH_STATUS = 0
BEGIN
IF @LoopNum = @LoopRows BREAK

FETCH NEXT FROM Data INTO @N#ºContab
SET @AssociadoId = (SELECT Id FROM L_7AssociadosAPDDEMO..L_Associado WHERE Numero = @N#ºContab)

USE EFA
DECLARE @ColNum INT = 1
DECLARE @ColRows INT
DECLARE ColNames CURSOR FOR
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'Eventos'
ORDER BY ordinal_position

OPEN ColNames

SET @ColRows = @@CURSOR_ROWS
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @ColName VARCHAR(200)
DECLARE @SQLQuery NVARCHAR(MAX)
DECLARE @Temp NVARCHAR(MAX)
DECLARE @Observacoes VARCHAR(MAX)

IF @ColNum = @ColRows BREAK

FETCH ColNames
INTO @ColName

SET @SQLQuery = N'SELECT EFA..Eventos.' + @ColName + ' FROM EFA..Eventos WHERE EFA..Eventos.N#ºContab = ' + @N#ºContab
EXECUTE sp_executesql @SQLQuery, N'@Observacoes VARCHAR(MAX) OUTPUT', @Observacoes OUTPUT;

INSERT INTO L_7AssociadosAPDDEMO..L_Biografia (L_AssociadoId, Descricao, Observacoes, Data, DataCriacao, DataUltimaActualizacao)
VALUES (@AssociadoId, @ColName, @Observacoes, '1900-01-01 00:00:00', '1900-01-01 00:00:00', '1900-01-01 00:00:00')

SET @ColNum = @ColNum + 1
END
CLOSE ColNames
DEALLOCATE ColNames

SET @LoopNum = @LoopNum + 1
END
PRINT 'DONE'
CLOSE Data
DEALLOCATE Data


因此,我启动了一个Cursor Data,它使用EFA数据库中的Eventos表中的N#ºContab获取所有行。

然后,我启动另一个Cursor ColNames,以从EFA数据库的Eventos表中获取所有列名,以便我可以从该列中获取列名和值。

DECLARE ColNames CURSOR FOR
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'Eventos'
ORDER BY ordinal_position


主要原因是我可以获取列名并将其存储在名为Descricao的列上,并将值存储在L_7AssociadosAPDDEMO数据库上表名称L_Biografia内名为Observacoes的列上。

问题是当我得到一个字符串的列名并且在一个动态SELECT查询上进行连接时,我得到了SELECT输出,但没有得到我需要的值本身。
因此,如果我尝试获取作为第一列的Active列,则它包含值1。我想检索该值1,但即时获取SELECT输出。因此,变量@Observacoes是nvarchar类型,因此它不获取输出,而是为空。

所以我被困在这里

SET @SQLQuery = N'SELECT EFA..Eventos.' + @ColName + ' FROM EFA..Eventos WHERE EFA..Eventos.N#ºContab = ' + @N#ºContab
EXECUTE sp_executesql @SQLQuery, N'@Observacoes VARCHAR(MAX) OUTPUT', @Observacoes OUTPUT;


查询工作应该可以工作。我唯一无法获得的是执行动态SELECT时的值。

那么,我该怎么做才能从使用sp_executesql输出动态构建的SELECTive中检索值?

预先谢谢你们。如果您需要更多信息,请询问。

最佳答案

如果您的动态查询返回X行,请使用以下命令:


您可以创建一个表变量,用于存储自定义列中的字符串值

DECLARE @table AS Table (value nvarchar(max)) 


然后加:

Insert into @table(value) Execute sp_executesql @SQLQuery...


并使用或查询

Select value From @table



如果您仅从动态查询中获得1个值,请使用该值:


SET @SQLQuery = N'SELECT @Observacoes = EFA..Eventos.' + @ColName + ' FROM EFA..Eventos WHERE EFA..Eventos.N#ºContab = ' + @N#ºContab
EXECUTE sp_executesql @SQLQuery, N'@Observacoes VARCHAR(MAX) OUTPUT', @Observacoes OUTPUT;
Select @Observacoes...


我只是在@SQLQuery中的Select之后添加了输出变量@Observacoes =。

原因是当在声明和 output中添加 sp_executesql时,它不会自动将选择结果存储到输出变量中。您仍然必须将其设置为...

关于sql - SQL动态地将数据从数据库存储到另一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com