使用IF/ELSE并插入临时表

Sco*_*ott 3 sql t-sql sql-server temp-tables

我正在尝试编写一个接受两个输入(内容ID和内容类型)的SQL查询,根据用户设置的内容类型从不同的源表填充临时表,然后最终针对temp运行查询表.我想我会把我的临时表合并到我的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
Run Code Online (Sandbox Code Playgroud)

而这会返回零结果:

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
Run Code Online (Sandbox Code Playgroud)

此外,我试过这个,它也返回零结果:

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
Run Code Online (Sandbox Code Playgroud)

我已经读过这个,这个,这个,但由于某种原因,它只是没有点击我.我正在使用MS SQL Server 2014,以防万一.这是SQL小提琴.谢谢!

Lam*_*mak 5

这实际上非常简单,你没有给出一个长度@contenttype,因此,默认情况下,它的长度为1个字符.

如果你这样做,这将很清楚:

DECLARE @contentID int, @contenttype varchar
SET @contentid = 28861
SET @contenttype = 'resource'
SELECT @contenttype 
Run Code Online (Sandbox Code Playgroud)

结果是r,IF (@contenttype = 'resource')事实并非如此