使用IF/ELSE并插入临时表

3
我正在尝试编写一个 SQL 查询,该查询接受两个输入(内容 ID 和内容类型),根据用户设置的内容类型从不同的源表填充临时表,然后最终针对临时表运行查询。我认为我卡在了如何将我的临时表合并到 IF/ELSE 语句中。
所以我的问题是,为什么这会返回一些非零结果:
DECLARE @contentID int, @contenttype varchar
SET @contentid = 28861
SET @contenttype = 'resource'

DECLARE @tags_current TABLE (contentID int, taxonomyID int, isPrimary int)

INSERT INTO @tags_current (contentID, taxonomyID, isPrimary)
SELECT resourceID as contentID, taxonomyID, isPrimary
FROM resource2taxonomy r2t
WHERE r2t.resourceID = @contentID

SELECT * FROM @tags_current

当搜索条件为零时,会返回零结果:

DECLARE @contentID int, @contenttype varchar
SET @contentid = 28861
SET @contenttype = 'resource'

DECLARE @tags_current TABLE (contentID int, taxonomyID int, isPrimary int)

IF (@contenttype = 'resource')
BEGIN
    INSERT INTO @tags_current (contentID, taxonomyID, isPrimary)
    SELECT resourceID as contentID, taxonomyID, isPrimary
    FROM resource2taxonomy r2t
    WHERE r2t.resourceID = @contentID
END

SELECT * FROM @tags_current

此外,我已经尝试过这个方法,同样没有返回任何结果:
DECLARE @contentID int, @contenttype varchar, @command varchar
SET @contentid = 28861
SET @contenttype = 'resource'

DECLARE @tags_current TABLE (contentID int, taxonomyID int, isPrimary int)

IF (@contenttype = 'resource')
BEGIN
    SET @command = 'INTO @tags_current (contentID, taxonomyID, isPrimary) SELECT resourceID as contentID, taxonomyID, isPrimary FROM resource2taxonomy r2t WHERE r2t.resourceID = @contentID'
END

EXECUTE(@command)
SELECT * FROM @tags_current

我已经阅读了 这篇文章这个问题这个问题,但出于某些原因,我仍然理解不了。 我正在使用MS SQL Server 2014,如果有帮助的话。 这是SQL Fiddle。谢谢!
1个回答

5

这其实非常简单,你没有给@contenttype指定长度,因此,默认情况下它的长度为1个字符。

如果你这样做,就能明白了:

DECLARE @contentID int, @contenttype varchar
SET @contentid = 28861
SET @contenttype = 'resource'
SELECT @contenttype 

结果是r,因此IF (@contenttype = 'resource')不成立。

谢谢 - 这就是答案。现在对我来说接受它还为时过早(10分钟内无法接受答案),但我会回来并这样做的。 - Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接