Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server为查询生成变量_Sql_Sql Server - Fatal编程技术网

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并不能完全“简化”您的查询