カーソル内のデータベースの名前に問題があります。ここに現在のコード
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
データベースがバージョン管理されているので、パラメータテーブルに保存されている変数としてデータベース名を使用する必要があります。スクリプトを簡単にするために、このように実行コマンドを使用します
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行を超えるため、すべてのスクリプトを文字列モードに切り替えることはできません。
ご協力いただきありがとうございます。