Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server CRLF序列作为存储过程中的默认参数值_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql server CRLF序列作为存储过程中的默认参数值

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 ... 但似乎

我希望SQL Server 2008中的存储过程具有为其参数之一指定的默认值。我希望这个值是一个CRLF序列。显然,SQL Server不允许我这样做:

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