我正在嘗試使用其他變量內的變量和其他變量執行刪除表。一些變量由查詢定義,然後在其他查詢的結果中使用。但是我遇到了這個問題,因爲當我解析我得到時SQL Server:變量刪除表和架構
命令成功完成。
但是,當我嘗試執行我得到以下錯誤信息。
消息245,級別16,狀態1,行18
轉換轉換VARCHAR值 'S' 爲數據類型int時失敗。
我找不出'S'的實際價值。
第18行是指
EXEC @defn_id_query
,它指的是變量在下面
SET @defn_id_query = (
'SELECT defn_id FROM ' + @systemschema + '.[defn]
WHERE [defn_type_name] = ''CONTAINER''
AND defn_subtype_id = 1
AND defn_name = ''' + @schema + ''
)
上市下面是完整的代碼
DECLARE @defn_ver_id_query varchar
DECLARE @defn_ver_id int
DECLARE @defn_id_query varchar
DECLARE @defn_id int
DECLARE @schema varchar
DECLARE @deleteschema varchar
DECLARE @systemschema varchar
DECLARE @variableSET varchar
DECLARE @deletesreferences varchar
SET @schema = 'fpscdb001_ws_001'
SET @systemschema = '[fpscdb001_system]'
SET @defn_id_query = (
'SELECT defn_id FROM ' + @systemschema + '.[defn]
WHERE [defn_type_name] = ''CONTAINER''
AND defn_subtype_id = 1
AND defn_name = ''' + @schema + ''
)
EXEC @defn_id_query
EXEC @defn_ver_id_query
SET @defn_id = (@defn_id_query)
SET @defn_ver_id = (@defn_ver_id_query)
SET @defn_ver_id_query = ('SELECT [defn_ver_id]
FROM ' + @systemschema + '.[defn_ver]
WHERE defn_id = @defn_id')
SET @deleteschema = (
'DROP TABLE ' + @schema + '.[id_generator]
DROP TABLE ' + @schema + '.[incident]
DROP TABLE ' + @schema + '.[incident_bal]
DROP TABLE ' + @schema + '.[incident_event_sum]
DROP TABLE ' + @schema + '.[incident_FH_HOURS]
DROP TABLE ' + @schema + '.[incident_FH_STAGE1]
DROP TABLE ' + @schema + '.[incident_FH_STAGE2]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3a]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3b]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3c]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3d]
DROP TABLE ' + @schema + '.[incident_FH_Stage4]
DROP TABLE ' + @schema + '.[incident_ST_STAGE1]
DROP TABLE ' + @schema + '.[incident_ST_STAGE2]DECLARE @defn_ver_id_query varchar
DECLARE @defn_ver_id int
DECLARE @defn_id_query varchar
DECLARE @defn_id int
DECLARE @schema varchar
DECLARE @deleteschema varchar
DECLARE @systemschema varchar
DECLARE @variableSET varchar
DECLARE @deletesreferences varchar
SET @schema = 'fpscdb001_ws_001'
SET @systemschema = '[fpscdb001_system]'
SET @defn_id_query = (
'SELECT defn_id FROM ' + @systemschema + '.[defn]
WHERE [defn_type_name] = ''CONTAINER''
AND defn_subtype_id = 1
AND defn_name = ''' + @schema + ''
)
SET @defn_id = (@defn_id_query)
SET @defn_ver_id = (@defn_ver_id_query)
EXEC @defn_id_query
EXEC @defn_ver_id_query
SET @defn_ver_id_query = ('SELECT [defn_ver_id]
FROM ' + @systemschema + '.[defn_ver]
WHERE defn_id = @defn_id')
SET @deleteschema = (
'DROP TABLE ' + @schema + '.[id_generator]
DROP TABLE ' + @schema + '.[incident]
DROP TABLE ' + @schema + '.[incident_bal]
DROP TABLE ' + @schema + '.[incident_event_sum]
DROP TABLE ' + @schema + '.[incident_FH_HOURS]
DROP TABLE ' + @schema + '.[incident_FH_STAGE1]
DROP TABLE ' + @schema + '.[incident_FH_STAGE2]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3a]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3b]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3c]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3d]
DROP TABLE ' + @schema + '.[incident_FH_Stage4]
DROP TABLE ' + @schema + '.[incident_ST_STAGE1]
DROP TABLE ' + @schema + '.[incident_ST_STAGE2]
DROP TABLE ' + @schema + '.[incident_ST_STAGE3]
DROP TABLE ' + @schema + '.[incident_status]
DROP TABLE ' + @schema + '.[incident_transn]
DROP TABLE ' + @schema + '.[incident_transn_sum]
DROP TABLE ' + @schema + '.[item_field_journal]
DROP SCHEMA ' + @schema
)
SET @deletesreferences = ('
DELETE FROM ' + @systemschema + '.[defn_reln]
WHERE from_defn_ver_id = @defn_ver_id
DELETE FROM ' + @systemschema + '.[defn_ver]
WHERE defn_id = ' + @defn_id + '
DELETE FROM ' + @systemschema + '.[cal_wksp]
WHERE wksp_defn_id = ' + @defn_id + '
DELETE FROM ' + @systemschema + '.[bus_proc_defn]
WHERE defn_id = ' + @defn_id + '
DELETE FROM ' + @systemschema + '.[defn]
WHERE [defn_type_name] = ''CONTAINER''
AND defn_subtype_id = 1
and defn_id = ' + @defn_id)
EXEC @deleteschema
EXEC @deletesreferences
DROP TABLE ' + @schema + '.[incident_ST_STAGE3]
DROP TABLE ' + @schema + '.[incident_status]
DROP TABLE ' + @schema + '.[incident_transn]
DROP TABLE ' + @schema + '.[incident_transn_sum]
DROP TABLE ' + @schema + '.[item_field_journal]
DROP SCHEMA ' + @schema
)
SET @deletesreferences = ('
DELETE FROM ' + @systemschema + '.[defn_reln]
WHERE from_defn_ver_id = @defn_ver_id
DELETE FROM ' + @systemschema + '.[defn_ver]
WHERE defn_id = ' + @defn_id + '
DELETE FROM ' + @systemschema + '.[cal_wksp]
WHERE wksp_defn_id = ' + @defn_id + '
DELETE FROM ' + @systemschema + '.[bus_proc_defn]
WHERE defn_id = ' + @defn_id + '
DELETE FROM ' + @systemschema + '.[defn]
WHERE [defn_type_name] = ''CONTAINER''
AND defn_subtype_id = 1
and defn_id = ' + @defn_id)
EXEC @deleteschema
EXEC @deletesreferences
我願意接受其他解決方案專業人士建議什麼?
感謝
編輯:
我猜所有這些撇號的取消是混淆我...我曾嘗試以下
SET @defn_ver_id_query = ('SELECT [defn_ver_id]
FROM ' + @systemschema + '.[defn_ver]
WHERE defn_id = convert(nvarchar(max),' + @defn_id + '')
我自己也嘗試這種方式以及。
SET @defn_ver_id_query = ('SELECT [defn_ver_id]
FROM ' + @systemschema + '.[defn_ver]
WHERE defn_id = ' + convert(nvarchar(max),@defn_id) + '')
新FULL編輯
DECLARE @defn_ver_id_query varchar(max)
DECLARE @defn_ver_id int
DECLARE @defn_id_query varchar(max)
DECLARE @defn_id int
DECLARE @schema varchar(max)
DECLARE @deleteschema varchar(max)
DECLARE @systemschema varchar(max)
DECLARE @variableSET varchar(max)
DECLARE @deletesreferences varchar(max)
SET @schema = 'fpscdb001_ws_001'
SET @systemschema = '[fpscdb001_system]'
SET @defn_id_query = (
'SELECT defn_id FROM ' + @systemschema + '.[defn]
WHERE [defn_type_name] = ''CONTAINER''
AND defn_subtype_id = 1
AND defn_name = ' + @schema + ''
)
SET @defn_id = (@defn_id_query)
SET @defn_ver_id = (@defn_ver_id_query)
EXEC (@defn_id_query)
EXEC (@defn_ver_id_query)
SET @defn_ver_id_query = ('SELECT [defn_ver_id]
FROM ' + @systemschema + '.[defn_ver]
WHERE defn_id = ' + convert(nvarchar(max),@defn_id) + '')
SET @deleteschema = (
'DROP TABLE ' + @schema + '.[id_generator]
DROP TABLE ' + @schema + '.[incident]
DROP TABLE ' + @schema + '.[incident_bal]
DROP TABLE ' + @schema + '.[incident_event_sum]
DROP TABLE ' + @schema + '.[incident_FH_HOURS]
DROP TABLE ' + @schema + '.[incident_FH_STAGE1]
DROP TABLE ' + @schema + '.[incident_FH_STAGE2]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3a]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3b]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3c]
DROP TABLE ' + @schema + '.[incident_FH_STAGE3d]
DROP TABLE ' + @schema + '.[incident_FH_Stage4]
DROP TABLE ' + @schema + '.[incident_ST_STAGE1]
DROP TABLE ' + @schema + '.[incident_ST_STAGE2]
DROP TABLE ' + @schema + '.[incident_ST_STAGE3]
DROP TABLE ' + @schema + '.[incident_status]
DROP TABLE ' + @schema + '.[incident_transn]
DROP TABLE ' + @schema + '.[incident_transn_sum]
DROP TABLE ' + @schema + '.[item_field_journal]
DROP SCHEMA ' + @schema
)
SET @deletesreferences = ('
DELETE FROM ' + @systemschema + '.[defn_reln]
WHERE from_defn_ver_id = ' + convert(nvarchar(max),@defn_ver_id) + '
DELETE FROM ' + @systemschema + '.[defn_ver]
WHERE defn_id = ' + convert(nvarchar(max),@defn_id) + '
DELETE FROM ' + @systemschema + '.[cal_wksp]
WHERE wksp_defn_id = ' + convert(nvarchar(max),@defn_id) + '
DELETE FROM ' + @systemschema + '.[bus_proc_defn]
WHERE defn_id = ' + convert(nvarchar(max),@defn_id) + '
DELETE FROM ' + @systemschema + '.[defn]
WHERE [defn_type_name] = ''CONTAINER''
AND defn_subtype_id = 1
and defn_id = ' + convert(nvarchar(max),@defn_id))
EXEC (@deleteschema)
EXEC (@deletesreferences)
聲明'varchar'沒有長度是你的問題的一部分。你還需要在使用'+'連接時將int轉換爲'varchar'。在'exec'調用中需要括號。 –
如果聲明沒有長度的'varchar',它默認爲'varchar(1)'。所以,例如,你的變量'@ defn_ver_id_query' ='S'。再加上其他人指出的一切。 – Andrew
感謝您的快速回復!好吧,現在我已經做出了你和lonic已經做出的調整,現在我收到一條錯誤信息,我相信我錯過了使用「SET」。我希望將defn_id設置爲defn_id_query的結果。 – user2869135