我正在尝试创建一个脚本来为另一个表生成一个插入。这就是我正在使用的:
DECLARE @sql AS NVARCHAR(MAX)
SELECT @sql = 'select update UNIDADE set values(CDUNIDADE=' + CONVERT(NVARCHAR,CD_UNIDADE)
+ ', CDINSTITUICAO=' + 'Ajustar' + ', NOUNIDADE='
+ '''' + NO_UNIDADE+ '''' + ', NORESUMO=' + '''' + NO_UNIDADE+ '''' + '
, CNPJ=' + '''' + NO_CNPJ + '''' + ', ENDERECO=' + '''' + NO_ENDERECO + '''' + ', BAIRRO=' + '''' + NO_BAIRRO + '''' + ',
CEP=' + '''' + NO_CEP + '''' + '
, CDCIDADE=' + CD_CIDADE +', FONE1=' + '''' + NO_TELEFONEDIRETOR + '''' + ', FONE2=' + '''' + NO_TELEFONECOORDENADOR + '''' +
', DIRETOR=' + '''' + NO_DIRETOR + '''' + ', EMAIL_DIRETOR=' + '''' + NO_EMAILDIRETOR + '''' +
', VDE=' + NULL + ', EMAIL_VDE=' + NULL + ', COORDENADOR=' + '''' + NO_COORDENADOR + '''' + ', EMAIL_COORD=' + '''' + NO_EMAILCOORDENADOR + '''' + '
, SENHA=' + '''' + NO_SENHA + '''' +', CDTIPOUNIDADE=' + NULL +'
, CDUNIDADE_ANT=' + NULL +', CDINSTITUICAO_ANT=' + NULL +', NOCONTRATANTE=' + NULL +', CNPJ_CONTRATANTE=' + NULL +'
, SENHA_ANTERIOR=' + NULL +', OBSERVACAO=' + NULL + ') where CDUNIDADE = '+ CD_UNIDADE from UNIDADE
当我尝试执行此语句时,出现此错误:
第245层状态1的状态3行
将varchar值',FONE1 ='转换为数据类型int时转换失败。
在这个阵营中,我有这种尝试的数据类型:
xxxxxxxxxx
(xx)xxxx-xxxx
NULL
阵营是一个nvarchar
,长度为32。
我在做什么错了?
编辑
我将代码更改为此。现在它几乎可以工作了,它为表中的每一行创建了一个脚本,但是所有内容都为空。
select 'update UNIDADE set (CDUNIDADE=' + CONVERT(NVARCHAR,CD_UNIDADE)
+ ', CDINSTITUICAO=' + 'Ajustar' + ', NOUNIDADE='
+ '''' + NO_UNIDADE+ '''' + ', NORESUMO=' + '''' + NO_UNIDADE+ '''' + '
, CNPJ=' + '''' + NO_CNPJ + '''' + ', ENDERECO=' + '''' + NO_ENDERECO + '''' + ', BAIRRO=' + '''' + NO_BAIRRO + '''' + ',
CEP=' + '''' + NO_CEP + '''' + '
, CDCIDADE=' + CONVERT(NVARCHAR,CD_CIDADE) +', FONE1=' + '''' + NO_TELEFONEDIRETOR + '''' + ', FONE2=' + '''' + NO_TELEFONECOORDENADOR + '''' +
', DIRETOR=' + '''' + NO_DIRETOR + '''' + ', EMAIL_DIRETOR=' + '''' + NO_EMAILDIRETOR + '''' +
', VDE=' + NULL + ', EMAIL_VDE=' + NULL + ', COORDENADOR=' + '''' + NO_COORDENADOR + '''' + ', EMAIL_COORD=' + '''' + NO_EMAILCOORDENADOR + '''' + '
, SENHA=' + '''' + NO_SENHA + '''' +', CDTIPOUNIDADE=' + NULL +'
, CDUNIDADE_ANT=' + NULL +', CDINSTITUICAO_ANT=' + NULL +', NOCONTRATANTE=' + NULL +', CNPJ_CONTRATANTE=' + NULL +'
, SENHA_ANTERIOR=' + NULL +', OBSERVACAO=' + NULL + ') where CDUNIDADE = '+ CONVERT(NVARCHAR,CD_UNIDADE) from UNIDADE
答案 0 :(得分:0)
我认为这里不需要动态SQL。似乎您正在尝试使用单行中的值更新表...或将它们设置为字符串文字。这是完成的方式:
update UNIDADE
set
CDUNIDADE = 'cd_unidade'
,CDINSTITUICAO = 'Ajustar'
,NOUNIDADE = 'no_unidade'
,NORESUMO = 'no_unidade'
,CNPJ = 'no_cnpj'
,ENDERECO = 'no_endereco'
,BAIRRO= 'no_bairro'
,CEP= 'no_cep'
,CDCIDADE = 'cd_cidade
,FONE1 = 'no_telefonediretor
,FONE2 = 'no_telefonecoordenador'
,DIRETOR = 'no_diretor'
,EMAIL_DIRETOR = 'no_emaildiretor'
,VDE = NULL
,EMAIL_VDE = NULL
,COORDENADOR = 'no_coordenador'
,EMAIL_COORD = 'no_emailcoordenador'
,SENHA = 'no_senha'
,CDTIPOUNIDADE = NULL
,CDUNIDADE_ANT = NULL
,CDINSTITUICAO_ANT = NULL
,NOCONTRATANTE = NULL
,CNPJ_CONTRATANTE = NULL
,SENHA_ANTERIOR = NULL
,OBSERVACAO = NULL
where CDUNIDADE = 'CD_UNIDADE'
如果输入错误,并且打算列出不同的表名,则需要使用联接进行更新。像这样:
update u
set
CDUNIDADE = o.cd_unidade
,CDINSTITUICAO = o.Ajustar
,NOUNIDADE = o.no_unidade
,NORESUMO = o.no_unidade
,CNPJ = o.no_cnpj
,ENDERECO = o.no_endereco
,BAIRRO= o.no_bairro
,CEP= o.no_cep
,CDCIDADE = o.cd_cidade
,FONE1 = o.no_telefonediretor
,FONE2 = o.no_telefonecoordenador
,DIRETOR = o.no_diretor
,EMAIL_DIRETOR = o.no_emaildiretor
,VDE = NULL
,EMAIL_VDE = NULL
,COORDENADOR = o.no_coordenador
,EMAIL_COORD = o.no_emailcoordenador
,SENHA = o.no_senha
,CDTIPOUNIDADE = NULL
,CDUNIDADE_ANT = NULL
,CDINSTITUICAO_ANT = NULL
,NOCONTRATANTE = NULL
,CNPJ_CONTRATANTE = NULL
,SENHA_ANTERIOR = NULL
,OBSERVACAO = NULL
from UNIDADE u
inner join someOtherTable o on o.id = u.id
答案 1 :(得分:0)
我让它起作用。我使用了这段代码。
select 'update UNIDADE set CDUNIDADE=' + CONVERT(NVARCHAR,CD_UNIDADE) + ', NOUNIDADE='
+ '''' + NO_UNIDADE + '''' +', NORESUMO=' + '''' + NO_UNIDADE+ '''' + '
, CNPJ=' + '''' + ISNULL(NO_CNPJ,'NULL') + '''' + ', ENDERECO=' + '''' + ISNULL(NO_ENDERECO,'NULL') + ''''
+ ', BAIRRO=' + '''' +ISNULL(NO_BAIRRO,'NULL' ) + '''' + ' ,
CEP=' + '''' + ISNULL(NO_CEP,'NULL') + '''' + ', CDCIDADE=' + ISNULL(CONVERT(NVARCHAR,CD_CIDADE),'NULL') +'
, FONE1=' + '''' + ISNULL(NO_TELEFONEDIRETOR,'NULL' ) + '''' + ', FONE2=' + '''' + ISNULL(NO_TELEFONECOORDENADOR,'NULL' ) + '''' +
', DIRETOR=' + '''' + ISNULL(NO_DIRETOR,'NULL' ) + '''' + ', EMAIL_DIRETOR=' + '''' + ISNULL(NO_EMAILDIRETOR,'NULL' ) + '''' +
', COORDENADOR=' + '''' +ISNULL(NO_COORDENADOR,'NULL' ) + '''' + ', EMAIL_COORD=' + '''' +ISNULL(NO_EMAILCOORDENADOR,'NULL' ) + '''' + '
, SENHA=' + '''' + NO_SENHA + '''' +'
where CDUNIDADE ='+CONVERT(NVARCHAR,CD_UNIDADE) from UNIDADE