【发布时间】:2015-08-05 11:02:33
【问题描述】:
我正在构建一个 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
所以我启动了一个游标 Data,它使用 N#ºContab 从 EFA 数据库中的表 Eventos 获取所有行。
然后我启动另一个游标 ColNames 以从 EFA 数据库 的 Eventos 表中获取所有列名,这样我就可以从该列中获取列名和值.
DECLARE ColNames CURSOR FOR
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'Eventos'
ORDER BY ordinal_position
主要原因是,所以我可以获取列名并将其存储在名为 Descricao 的列上,并将值存储在表名 内名为 Observacoes 的列上>L_Biografia 在 L_7AssociadosAPDDEMO 数据库中。
问题是,当我得到列名时,那是一个字符串。我在动态 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 输出动态构建的 SELECT 中检索值?
【问题讨论】:
标签: sql sql-server sql-server-2012