SQL Server为查询生成变量
我在简化此查询时遇到问题。SQL Server为查询生成变量,sql,sql-server,Sql,Sql Server,我在简化此查询时遇到问题。 我需要将12设为一个变量,这样我只需设置一次,还需要设置%BrightSide08 因为我需要用不同的名字和长度重复这个 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 WHE
我需要将12设为一个变量,这样我只需设置一次,还需要设置
%BrightSide08
因为我需要用不同的名字和长度重复这个
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')
)
我错过什么了吗?请纠正我。谢谢。指定数据类型时不能提供变量。尝试生成动态sql字符串:
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
不幸的是,动态SQL并不能完全“简化”您的查询