我在PostgreSQL或Oracle中做我的第一个数据库项目.
我想得到我的问题的答案.
在处理所有困难的事情后,我可能会尝试做一件简单的事情但看起来这让我很头疼.我试图将文本连接到变量@strXml这是一个nvarchar变量来构建Xml元素,但@strXml返回null.请帮忙.我在下面发布我的代码.
DECLARE @strXml nvarchar(max) = ''
SET @strXml = '<PromoName>' + (Select PromoName From #Temp) + '</PromoName>'
SET @strXml = @strXml + '<PromoDesc>' + (Select PromoDesc From #Temp) + '</PromoDesc>'
SET @strXml = @strXml + '<PromoCode>' + (Select PromoCode From #Temp) + '</PromoCode>'
SET @strXml = @strXml + '<BeginDate>' + (Select Convert(nvarchar, BeginDate) From #Temp) + '</BeginDate>'
SET @strXml = @strXml + '<EndDate>' + (Select Convert(nvarchar, EndDate) From #Temp) + '</EndDate>'
SET @strXml = @strXml + '<RawHtml>' + (Select RawHtml …Run Code Online (Sandbox Code Playgroud) 我有一个varbinary(max)列和nvarchar(max)列的表.其中一个是null,另一个是值.
我想返回具有varbinary(max)列值的列.到目前为止,我已经尝试过这个,但是没有用:
SELECT
A =
CASE A
WHEN NULL THEN B
ELSE A
END
FROM Table
Run Code Online (Sandbox Code Playgroud) 在SQL Server 2008(TSQL)中,我创建了一个这样的存储过程:
CREATE PROCEDURE SP_1_10_2
AS
declare @mostValuableBook nvarchar(255)
SELECT @mostValuableBook = Name
FROM books
WHERE price =
( SELECT MAX(price)
FROM books
WHERE izd LIKE '%BHV%' );
return @mostValuableBook
GO
Run Code Online (Sandbox Code Playgroud)
但是,当我试图执行它时:
declare @x nvarchar(255)
EXECUTE @x = SP_1_10_2;
SELECT 'The most expensive BHV book:', @x AS 'Name'
GO
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
将nvarchar值'Internet Explorer 3 original'转换为数据类型int时转换失败.
似乎问题就在于此
EXECUTE @x = SP_1_10_2;
Run Code Online (Sandbox Code Playgroud)
你能告诉我什么是错的吗?为什么要尝试转换为int?
当你添加传递一个新job_type的sys.sp_cdc_add_job @job_type,
(这是类型nvarchar(20))
您可以将参数传递为
N'清理'使用前一种语法N'将参数传递给存储过程是否有任何理由或好处?
我一直在更改数据库,并创建一个脚本,以便它可以在原始数据库上运行,以继承我所做的所有更改.
我需要改变NVARCHAR的长度,但是在改变列之前要检查它的长度.我对语法有点挣扎,任何人都可以帮我解决这个问题吗?
SELECT LEN(colName) AS MyLength FROM tblName
IF MyLength = 60
BEGIN
ALTER TABLE tblName
ALTER COLUMN colName nvarchar(140) NOT NULL
END
GO
Run Code Online (Sandbox Code Playgroud)
如果我尝试在SQL Server Management Studio中运行此查询,则会收到一条错误消息:
列名称"MyLength"无效.
我有两varchar列的表first_name和last_name.
现在我需要将这些列转换nvarchar为支持UTF-8.
我nvarchar在SSMS中为这些列选择数据类型,当我尝试输入一些UTF-8数据时,我的符号会转换为问号.例如,如果我输入??????(乌克兰语),它将被转换为??????.
有什么问题以及如何解决?
谢谢.
我正在尝试将此名称 -> Num?Twó 与重音一起添加到 MS sql server 中的表中。但它只是被插入为 -> NumaTwó(没有?)。我尝试了很多编码,但似乎不起作用。我已经给出了下表的 DDL。请帮忙
CREATE TABLE [dbo].[test](
[testname] [nvarchar](40) COLLATE SQL_Latin1_General_CP1253_CI_AI NULL
) ON [PRIMARY]
----------- Insert-----------
insert into test values ('Num?Twó');
Run Code Online (Sandbox Code Playgroud) sql sql-server nvarchar character-encoding non-ascii-characters
无论出于何种原因,查询都会被构建为字符串并传递给另一个存储过程来执行。
查询量很大。
超过一千行,我们遇到了一个问题,需要我对其进行调试。
查询被构建到声明的NVARCHAR(MAX)变量中,但是当我使用以下命令打印它时,发生了奇怪的事情 -
WHILE @Printed < @ToPrint BEGIN
PRINT(SUBSTRING(
@sql, @Printed, 4000))
SET @Printed = @Printed + 4000
PRINT('Printed: ' + CONVERT(VARCHAR, @Printed))
END
Run Code Online (Sandbox Code Playgroud)
在打印消息的某个地方,它只是......丢失了一大块,我不明白为什么。NVARCHAR(MAX)应该能够举行战争与和平超过 100 次,并且这个查询不是战争与和平。
我知道PRINT(...)有一次只能打印 4000 个字符的限制(因此是循环),但这并不能解释为什么变量只是@sql在某些地方丢失了一块。
如果有帮助的话,具体来说,块丢失的位置是打印前 4,000 个字符后的大约 1,600 个字符。
它为什么要这样做?我是否缺少在查询开始时设置系统变量(例如 NOCOUNT 或 ARITHABORT?我什至不知道它们的作用,或者它们是否参与其中。
编辑:MCVE:这里。要重现,请复制粘贴到 Microsoft SQL Server Management Studio 中并按“F5”。打印的消息将不包含完整的@sql。
nvarchar ×10
sql ×6
sql-server ×6
t-sql ×2
alter ×1
database ×1
execute ×1
int ×1
max ×1
mysql ×1
phpmyadmin ×1
sqldatatypes ×1
string ×1
varbinary ×1