Inquiridor
Retorno de um campo TEXT em uma Stored Procedure

Pergunta
-
Olá a todos!
Estou tendo um pequeno problema qdo faço uma chamada a uma Stored procedure e entre os campos que são retornados um deles eh do tipo TEXT, e todos os campos são retornados, menos o TEXT
Alguem tem alguma ideia de como posso resolver esse problema?
Obrigado!!!!
Todas as Respostas
-
Ola
Estranho isso.. uso SP bastante e nao tenho problema nem nunca tive nada parecido.. posta a sua proc para poder ver se tem algo errado nela.. Pois o erro deve estar nela. ou quando vc esta chamando o campo poder estar colocando o nome dele errado. mas isso iria causar um erro retornando que o campo que vc tentou mostra não faz parte da tabela..
Mas se der post ai a proc e tb a parte do asp que vc chama o campo... pra ver se achamos onde esta o erro.
t+
-
Olá Robert,
Vai a proc e o codigo pra dar uma olhada:
--asp
sql = "{ call STP_SITE_CORRECAO_DUVIDAS_BUSCA(" & mFor_id & "," & "NULL" & "," & "NULL" & "," & "NULL" & "," & "NULL" & "," & "NULL" & "," & "NULL" & "," & "NULL" & "," & "NULL" & "," & "NULL" & "," & "'DATA/SEQUENCIA')}"
rsVT2001.Open sql, VT2001, 1, 3
if rsVT2001.eof then response.write "Não há registros."
else %>
Dúvida
Nome: Login: Titulo: Mensagem:
Discussões
Nome: Login: Mensagem:
----proc
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOALTER PROCEDURE STP_SITE_CORRECAO_DUVIDAS_BUSCA
@FOR_ID INT
,@FOR_SEQUENCIA INT
,@FOR_TITULO VARCHAR
,@FOR_NIVEL INT
,@PROJ_ID INT
,@ATIV_ID INT
,@AREA_ID INT
,@GRU_ID INT
,@SO_RESPOSTAS BIT
,@SO_PERGUNTAS BIT
,@ORDER VARCHAR
AS
BEGINDECLARE @T TABLE(FOR_ID INT ,FOR_SEQUENCIA INT ,FOR_DATA DATETIME ,TITULO VARCHAR(100),MENSAGEM text, USU_ID INT, ADM_ID INT, USU_NOME VARCHAR(100), USU_EMAIL VARCHAR(500))
INSERT INTO @T
SELECT
FOR_ID,
FOR_SEQUENCIA,
FOR_DATA,
FOR_TITULO,
FOR_MENSAGEM,
ISNULL(FORUM.USU_ID,-1),
ISNULL(FORUM.ADM_ID,-1),
USU_NOME AS USU_NOME,
USU_EMAIL AS USU_EMAIL
FROM
FORUM WITH (NOLOCK),
USUARIO WITH (NOLOCK)
WHERE 1=1
AND FORUM.USU_ID = USUARIO.USU_ID
AND ((@FOR_TITULO IS NULL)OR(FOR_TITULO LIKE '%''' + @FOR_TITULO + '%'''))
AND ((@SO_RESPOSTAS IS NULL) OR (FORUM.FOR_SEQUENCIA <> 1))
AND ((@SO_PERGUNTAS IS NULL) OR (FORUM.FOR_SEQUENCIA = 1))
AND ((@FOR_ID IS NULL) OR (FORUM.FOR_ID = @FOR_ID))
AND ((@FOR_SEQUENCIA IS NULL) OR (FORUM.FOR_SEQUENCIA = @FOR_SEQUENCIA))
AND ((@FOR_NIVEL IS NULL) OR (FORUM.FOR_NIVEL = @FOR_NIVEL))
AND ((@PROJ_ID IS NULL) OR (FORUM.PROJ_ID = @PROJ_ID))
AND ((@ATIV_ID IS NULL) OR (FORUM.ATIV_ID = @ATIV_ID))
AND ((@AREA_ID IS NULL) OR (FORUM.AREA_ID = @AREA_ID))
AND ((@GRU_ID IS NULL) OR (FORUM.GRU_ID = @GRU_ID))
INSERT INTO @T
SELECT
FOR_ID,
FOR_SEQUENCIA,
FOR_DATA,
FOR_TITULO,
FOR_MENSAGEM,
ISNULL(FORUM.USU_ID,-1),
ISNULL(FORUM.ADM_ID,-1),
ADM_NOME AS USU_NOME,
ADM_EMAIL AS USU_EMAIL
FROM
FORUM WITH (NOLOCK),
ADMINISTRADOR WITH (NOLOCK)
WHERE 1=1
AND FORUM.ADM_ID = ADMINISTRADOR.ADM_ID
AND ((@FOR_TITULO IS NULL)OR(FOR_TITULO LIKE '%''' + @FOR_TITULO + '%'''))
AND ((@SO_RESPOSTAS IS NULL) OR (FORUM.FOR_SEQUENCIA <> 1))
AND ((@SO_PERGUNTAS IS NULL) OR (FORUM.FOR_SEQUENCIA = 1))
AND ((@FOR_ID IS NULL) OR (FORUM.FOR_ID = @FOR_ID))
AND ((@FOR_SEQUENCIA IS NULL) OR (FORUM.FOR_SEQUENCIA = @FOR_SEQUENCIA))
AND ((@FOR_NIVEL IS NULL) OR (FORUM.FOR_NIVEL = @FOR_NIVEL))
AND ((@PROJ_ID IS NULL) OR (FORUM.PROJ_ID = @PROJ_ID))
AND ((@ATIV_ID IS NULL) OR (FORUM.ATIV_ID = @ATIV_ID))
AND ((@AREA_ID IS NULL) OR (FORUM.AREA_ID = @AREA_ID))
AND ((@GRU_ID IS NULL) OR (FORUM.GRU_ID = @GRU_ID))
IF @ORDER = 'DATA/ID/SEQUENCIA'
BEGIN
SELECT
FOR_ID AS FOR_ID,
FOR_SEQUENCIA AS FOR_SEQUENCIA,
FOR_DATA AS FOR_DATA,
TITULO AS TITULO,
MENSAGEM AS MENSAGEM,
USU_ID AS USU_ID,
ADM_ID AS ADM_ID,
USU_NOME AS USU_NOME,
USU_EMAIL AS USU_EMAIL
FROM
@T
ORDER BY
FOR_DATA,FOR_ID,FOR_SEQUENCIA DESC
ENDELSE IF @ORDER = 'DATA/SEQUENCIA'
BEGIN
SELECT
FOR_ID AS FOR_ID,
FOR_SEQUENCIA AS FOR_SEQUENCIA,
FOR_DATA AS FOR_DATA,
TITULO AS TITULO,
MENSAGEM AS MENSAGEM,
USU_ID AS USU_ID,
ADM_ID AS ADM_ID,
USU_NOME AS USU_NOME,
USU_EMAIL AS USU_EMAIL
FROM
@T
ORDER BY
FOR_DATA,FOR_SEQUENCIA ASC
END
ELSE
BEGIN
SELECT
FOR_ID AS FOR_ID,
FOR_SEQUENCIA AS FOR_SEQUENCIA,
FOR_DATA AS FOR_DATA,
TITULO AS TITULO,
MENSAGEM AS MENSAGEM,
USU_ID AS USU_ID,
ADM_ID AS ADM_ID,
USU_NOME AS USU_NOME,
USU_EMAIL AS USU_EMAIL
FROM
@T
ORDER BY
FOR_SEQUENCIA ASC
END
ENDGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO--
Muito Obrigado!
-
Ulliana,
O campo TEXT não retorna (ele diz que a coluna não existe), ou retorna nulo ?
Ví que vc popula uma tabela temporária para retorna uma consulta, e que vc executa consulta em 2 tabelas para popular sua temporária. Já pensou em usa um UNION no lugar de fazer 2 selects? Não dominio desempenho de banco, mas creio que seria mais eficiente.
Experimente! -
Olá Thiago.....
O Campo retornado é nulo...
Fica inviavel fazer uma union já q que na tabela existe o campo do tipo TEXT, o sql não possibilita fazer unions com campos text....o erro retornado é "não é possivel fazer distinct em no campo text"
mas se vc conhece alguma outra forma, eu fico feliz em aprender ;)