只是一个简单的问题,如何简化以下查询,还可以替换任何东西而不是while循环..?感谢。
DECLARE @CNT INT=0
,@CNTER INT=1
,@REF VARCHAR(20)
,@TABLENAME VARCHAR(20)
,@SQL VARCHAR(MAX)
DECLARE @TABLE TABLE(ID INT,TABLENAME VARCHAR(20),DES VARCHAR(20))
INSERT @TABLE
SELECT 1,'TB1','MASTER'
UNION
SELECT 2,'TB2','MASTER'
UNION
SELECT 3,'TB3','SLAVE'
UNION
SELECT 4,'TB4','SLAVE'
SELECT @CNT =COUNT(*) FROM @TABLE
WHILE @CNTER<=@CNT
BEGIN
SET @REF= (SELECT DES FROM @TABLE WHERE ID=@CNTER)
SET @TABLENAME=(SELECT TABLENAME FROM @TABLE WHERE ID=@CNTER)
IF @REF='MASTER'
BEGIN
SET @SQL='SELECT * FROM '''+@TABLENAME+''' A
INNER JOIN REPS C ON A.NAME=C.NAME'
END
IF @REF='SLAVE'
BEGIN
SET @SQL='SELECT * FROM '''+@TABLENAME+''' A
INNER JOIN REPS C ON A.NAME=C.NAME'
END
SELECT @CNTER=@CNTER+1
END
有没有人来解决这个问题?
答案 0 :(得分:0)
这是一种方式
SET @sql = (SELECT CASE
WHEN DES = 'master' THEN 'SELECT * FROM ''' + QUOTENAME(@TABLENAME)
+ ''' A
INNER JOIN REPS C ON A.NAME=C.NAME;'
WHEN DES = 'SLAVE' THEN 'SELECT * FROM ''' + QUOTENAME(@TABLENAME)
+ ''' A
INNER JOIN REPS C ON A.NAME=C.NAME;'
END
FROM @TABLE
FOR xml path (''),TYPE
).value('.', 'NVARCHAR(MAX)')
SELECT @sql
值得一提的是IF
条件内的语句是相同的
答案 1 :(得分:0)
DECLARE @CNT INT=0
,@CNTER INT=1
,@REF VARCHAR(20)
,@TABLENAME VARCHAR(20)
,@SQL VARCHAR(MAX)
DECLARE @TABLE TABLE(ID INT,TABLENAME VARCHAR(20),DES VARCHAR(20))
INSERT @TABLE
SELECT 1,'TB1','MASTER'
UNION
SELECT 2,'TB2','MASTER'
UNION
SELECT 3,'TB3','SLAVE'
UNION
SELECT 4,'TB4','SLAVE'
SELECT @CNT =COUNT(*) FROM @TABLE
WHILE @CNTER<=@CNT
BEGIN
SET @TABLENAME=(SELECT TABLENAME FROM @TABLE WHERE ID=@CNTER)
SET @SQL='SELECT * FROM '''+@TABLENAME+''' A
INNER JOIN REPS C ON A.NAME=C.NAME'
SELECT @CNTER=@CNTER+1
END
答案 2 :(得分:0)
试试这个:
DECLARE @CNT INT=0
,@CNTER INT=1
,@REF VARCHAR(20)
,@TABLENAME VARCHAR(20)
,@SQL VARCHAR(MAX)
DECLARE @TABLE TABLE(ID INT,TABLENAME VARCHAR(20),DES VARCHAR(20))
INSERT @TABLE
SELECT 1,'TB1','MASTER'
UNION
SELECT 2,'TB2','MASTER'
UNION
SELECT 3,'TB3','SLAVE'
UNION
SELECT 4,'TB4','SLAVE'
SET @SQL = (SELECT 'SELECT * FROM ' + QUOTENAME(TABLENAME) + ' A INNER JOIN REPS C ON A.NAME = C.NAME; ' FROM @TABLE FOR XML PATH(''))
SELECT @SQL