I'm having problems in simplifying this query.
I need to make 12 a variable so I'll only have to set it once and also the %BrightSide08
.
Because I need to repeat this with different names and lengths.
Declare @len int, @name varchar
SET @len = 12
SET @name = '%BrightSide08'
UPDATE CHAR_DATA0
SET CHAR_DATA = (SELECT CHAR_DATA FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(12), SUBSTRING(CHAR_DATA, 9, 16)) LIKE '%BrightSide08')
WHERE CHAR_KEY = (
SELECT top (1) CHAR_KEY
FROM CHAR_DATA0
WHERE USER_KEY = (SELECT USER_KEY FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(12), SUBSTRING(CHAR_DATA, 9, 16)) LIKE '%BrightSide08')
)
UPDATE CHAR_INFOR
SET CHARID0 = (SELECT CONVERT(VARCHAR(12), SUBSTRING(CHAR_DATA, 9, 16)) FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(12), SUBSTRING(CHAR_DATA, 9, 16)) LIKE '%BrightSide08')
WHERE USER_KEY = (
SELECT top (1) USER_KEY
FROM CHAR_DATA0
WHERE USER_KEY = (SELECT USER_KEY FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(12), SUBSTRING(CHAR_DATA, 9, 16)) LIKE '%BrightSide08')
)
SELECT *
FROM CHAR_DATA0
WHERE USER_KEY = (SELECT USER_KEY FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(12), SUBSTRING(CHAR_DATA, 9, 16)) LIKE '%BrightSide08')
SELECT *
FROM [game].[dbo].[CHAR_INFOR]
WHERE USER_KEY = (
SELECT top (1) USER_KEY
FROM game.dbo.CHAR_DATA0
WHERE USER_KEY = (SELECT USER_KEY FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(12), SUBSTRING(CHAR_DATA, 9, 16)) LIKE '%BrightSide08')
)
Am I missing something? Please correct me. Thank you.
You can't supply a variable when specifying a data type. Try making a dynamic sql string:
Declare @len int, @name varchar
SET @len = 12
SET @name = '%BrightSide08'
DECLARE @strSql NVARCHAR(MAX) =
N'UPDATE CHAR_DATA0
SET CHAR_DATA = (SELECT CHAR_DATA FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(' + @len + '), SUBSTRING(CHAR_DATA, 9, 16)) LIKE ''' + @name + ''')
WHERE CHAR_KEY = (
SELECT top (1) CHAR_KEY
FROM CHAR_DATA0
WHERE USER_KEY = (SELECT USER_KEY FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(' + @len + '), SUBSTRING(CHAR_DATA, 9, 16)) LIKE ''' + @name + ''')
)
UPDATE CHAR_INFOR
SET CHARID0 = (SELECT CONVERT(VARCHAR(' + @len + '), SUBSTRING(CHAR_DATA, 9, 16)) FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(' + @len + '), SUBSTRING(CHAR_DATA, 9, 16)) LIKE ''' + @name + ''')
WHERE USER_KEY = (
SELECT top (1) USER_KEY
FROM CHAR_DATA0
WHERE USER_KEY = (SELECT USER_KEY FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(' + @len + '), SUBSTRING(CHAR_DATA, 9, 16)) LIKE ''' + @name + ''')
)
SELECT *
FROM CHAR_DATA0
WHERE USER_KEY = (SELECT USER_KEY FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(' + @len + '), SUBSTRING(CHAR_DATA, 9, 16)) LIKE ''' + @name + ''')
SELECT *
FROM [game].[dbo].[CHAR_INFOR]
WHERE USER_KEY = (
SELECT top (1) USER_KEY
FROM game.dbo.CHAR_DATA0
WHERE USER_KEY = (SELECT USER_KEY FROM xtreme.dbo.CHAR_DATA0
WHERE CONVERT(VARCHAR(' + @len + '), SUBSTRING(CHAR_DATA, 9, 16)) LIKE ''' + @name + ''')
)'
EXEC sp_executesql @strSql
Unfortunately, dynamic SQL does not exactly "simplify" your query.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.