Sql server CRLF序列作为存储过程中的默认参数值
我希望SQL Server 2008中的存储过程具有为其参数之一指定的默认值。我希望这个值是一个CRLF序列。显然,SQL Server不允许我这样做:Sql server CRLF序列作为存储过程中的默认参数值,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我希望SQL Server 2008中的存储过程具有为其参数之一指定的默认值。我希望这个值是一个CRLF序列。显然,SQL Server不允许我这样做: CREATE PROCEDURE SomeProc @arg1 nvarchar(2) = CHAR(13) + CHAR(10), @arg2 ... 我知道我可以把这个序列简单地写成: CREATE PROCEDURE SomeProc @arg1 nvarchar(2) = ' ', @arg2 ... 但似乎
CREATE PROCEDURE SomeProc
@arg1 nvarchar(2) = CHAR(13) + CHAR(10),
@arg2
...
我知道我可以把这个序列简单地写成:
CREATE PROCEDURE SomeProc
@arg1 nvarchar(2) = '
',
@arg2
...
但似乎。。。不完全正确。如果我通过电子邮件将此脚本发送给某人,并且CRLF转换为LF,该怎么办?还是意外添加了一些空间?或者最后,如果我想要其他序列(让它成为任何Unicode字符),该怎么办
使用变量存储默认值不是一个选项,因为没有地方声明和初始化变量,因为CREATE PROCEDURE
必须是批处理中的第一条语句
在语句字符串上使用EXEC
显然太麻烦了
是否有更好的方法允许不可打印的ASCII/Unicode字符序列作为存储过程参数的默认值
CREATE PROCEDURE dbo.SomeProc
@arg1 nvarchar(2) = 0x0D000A00 --CHAR(13) + CHAR(10)
运行下面的代码返回“等于”:
要确定应使用的十六进制序列,可以执行以下操作:
declare @arg1 nvarchar(2) = CHAR(13) + CHAR(10)
select cast(@arg1 as varbinary(max))
返回:
0x0D000A00
我不认为可以选择将默认值设为空字符串,然后作为过程的第一行,只需测试“如果参数为空字符串,请将其设置为CRLF”@pmbAustin,不,因为它是.NET CLR过程。简直太棒了!我没有想到我可以在没有
CONVERT
的情况下将二进制数据分配给nvarchar。
0x0D000A00