我是T-SQL的新手,想知道为什么以下工作并且不会引发错误:
我有:
DECLARE @aVARCHAR(200), @b VARCHAR(100)
SET @a = (Some complicated SELECT Statement)
SET @b = 'ALTER TABLE abc DROP CONSTRAINT ' + @a; <-------- expected it to contain string.
Exec(@b);
第一个集合有一个复杂的select语句,它返回NO行。
然后我希望@b有字符串'ALTER TABLE abc DROP CONSTRAINT'但是在调试时它是空的。这是我发现令人困惑的事情。为什么会这样?
我正在使用SQL Server Express 2008。
答案 0 :(得分:4)
如果@a为null,则连接到它的任何内容也将为null。做点什么
isnull(@a,'') + 'rest of the string'
答案 1 :(得分:2)
有一些问题:
1)@a出现为null,因此@b赋值没有按预期工作。在尝试使用它并执行@b之前,先对@a进行验证检查。至于为什么它是空白的,请确保您的复杂查询位正确。
2)@b需要大于@a以确保它可以保存ALTER TABLE命令以及进入@a的任何内容。目前你的@b只有@a的一半。
答案 2 :(得分:2)
每当连接字符串时,必须防止空值,因为无论何时将字符串与null连接起来,结果字符串都为null:
DECLARE @NullValue varchar(5)
SET @NullValue=null --not necessary but to make the point
SELECT 'Hello World'+@NullValue
输出:
------------
NULL
(1 row(s) affected)
防止空值:
DECLARE @NullValue varchar(5)
SET @NullValue=null --not necessary but to make the point
SELECT 'Hello World'+ISNULL(@NullValue,'')
输出:
------------
Hello World
(1 row(s) affected)
另一个例子:
SELECT 'Hello World'+@YourValueHere
会显示什么?谁知道,如果@YourValueHere是NULL,那么什么都没有。使用它来确保你得到你想要的东西:
SELECT 'Hello World'+ISNULL(@YourValueHere,'')