我对游标中的数据库名称有疑问。这里是当前代码
DECLARE @IDES INT
DECLARE @IDPROD INT
DECLARE @count INT
SET @count = 0
DECLARE CUR_CONSO CURSOR LOCAL fast_forward FOR
SELECT E2.id_es ,P3.id_prod FROM
[gpto_v004p001].[dbo].[GPTO_PRODETAB] P1
INNER JOIN
[fer_v008].[dbo].[T_PRODUIT] P3
ON P3.GPTO_PRODUIT_ID = P1.GPTO_PRODUIT_ID
INNER JOIN [gpto_v004p001].[dbo].[GPTO_ETAB] E1
ON E1.ETABID = P1.ETABID
INNER JOIN
[fer_v008].[dbo].[t_etablissement] E2
ON E1.ETABUC = LEFT(E2.code_es,5)
LEFT JOIN
[fer_v008].[dbo].[t_produit_etablissement] PE1
ON PE1.id_prod = P3.id_prod AND PE1.id_es = E2.id_es
WHERE PE1.id_es IS NULL AND GPTO_PRODUIT_ETAPE = 4
OPEN CUR_CONSO
FETCH CUR_CONSO INTO @IDES , @IDPROD
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS (Select * from [fer_v008].[dbo].[t_produit_etablissement] where id_es=@IDES and id_prod=@IDPROD) -- Pas d'enregistrements
BEGIN
INSERT INTO [fer_v008].[dbo].[t_produit_etablissement]
([id_es],[id_prod],[gest_prod])
VALUES
(@IDES,@IDPROD,0)
SET @count = @count + 1
END
FETCH CUR_CONSO INTO @IDES , @IDPROD
END
CLOSE CUR_CONSO
DEALLOCATE CUR_CONSO
由于数据库是版本化的,我需要使用数据库名称作为保存在参数表中的变量。对于简单的脚本,我使用 Execute 命令作为这个
DECLARE @base_travail varchar(128)
SELECT @base_travail = val_str_par FROM t_parametre WHERE nom_par = 'base_travail'
DECLARE @execcmd varchar(max)
SET @execcmd = 'insert into #tmpfiltres SELECT TOP 1 filtre_exu FROM '
+ @base_travail + '.dbo.t_export_util WHERE id_exu =' + convert(varchar,@id_exu)
Execute (@execcmd)
但是当我有光标时怎么办?第一个示例代码只是一个示例,整个脚本超过 400 行,所以我无法在字符串模式下切换所有脚本。
谢谢你的帮助。