AJUDA COM SQL

CASSIOJFF 22/08/2012 09:54:17
#408321
Blz, necessito atualizar um campo smalldatetime(data1), com o conteudo de um campo char(data), montei um sql mas nao estou conseguindo verificar aonde errei

a string que montei é essa

update mesaprodutos set data1= a.data2 from (select data + [ô] 23:59:59[ô] as data2 from mesaprodutos where data1 is null and data is not null) a

se alguem puder ajudar desde ja agradeço
ROBSON220BASS 22/08/2012 15:08:48
#408345
esse update ta meio estranho

tenta:

UPDATE mesaprodutos SET data1=a.data2 where (aqui vai o select ...)

ou entao posta todo o codigo do update ai pra verificacao...

ok?
CASSIOJFF 23/08/2012 12:06:55
#408439
Fiz uma alteracao no sql que montei, que ate funcionou com uma alteracao de campo smalldatetime para varchar, mas com o smalldatetime da erro de conversao, alguem poderia me ajudar.

a sql q usei foi

update mesaprodutos set data4 = a.data2 from mesaprodutos as b,(select data + [ô] 23:59:00[ô] as data2,codigo from mesaprodutos where data1 is null and data is not null) a where b.codigo = a.codigo

onde o campo data é um varchar, que ja tem algum registros somente com a data
o campo data1 é um campo smalldatetime com alguns registros preenchidos com data e hora


Se alguem puder ajudar
CASSIOJFF 23/08/2012 21:34:19
#408489
alguem pra ajudar?
PROFESSOR 24/08/2012 03:52:01
#408513
Resposta escolhida
SQL Server, presumo.

Se o catálogo ou o servidor estiver com uma configuração de linguagem diferente daquela gravada no campo VarChar, o SQL Server não conseguirá interpretar o texto resultante como uma data válida. Assim, a instrução do update teria de [Ô]forçar[Ô] a compatibilidade.

Por exemplo, digamos que você gravou [Ô]21/10/2011[Ô] no campo VarChar. Esse valor utiliza o formato Dia / Mês / Ano, enquanto que o SQL Server pode estar usando o inglês, que é o padrão. Neste caso ocorreria o erro na execução do update.
Sem mudar os dados do campo Varchar nem alterar as configurações do SQL Server, você pode concatenar ao início da instrução um [Ô]SET DATAFORMAT DMY;[Ô], forçando o SQL Server á entender o conteúdo do campo VarChar como uma data válida.
Ficaria algo como, usando a sua instrução:

SET DATAFORMAT DMY;update mesaprodutos set data4 = a.data2 from mesaprodutos as b,(select data + [ô] 23:59:00[ô] as data2,codigo from mesaprodutos where data1 is null and data is not null) a where b.codigo = a.codigo;


é assim mesmo, não estranhe: Duas instruções na mesma linha, separadas pelo [Ô];[Ô], são executadas em sequência, na mesma operação.
Tópico encerrado , respostas não são mais permitidas